SpringBoot + camel+IBM MQ实现消息队列处理

JAVA(SpringBoot+JMS)接入IBM MQ 收发消息全网最完整(上) JAVA(SpringBoot)接入IBM MQ 收发消息全网最完整一、安装二、配置环境2.1、修改mqm用户密码2.1、修改环境变量三、配置一个队列(可以通过java程序进行收发) 一、安装 先登录到root用户下,然后执行如下命令,进入tmp文件夹 命令: cd /tmp 然后创建一个文件夹 命令: mkdir mq 进入文件夹 命令: cd mq 然后将我们的IBM MQ的安装包放到这个文件夹下(使用传输工具) 然后使用命令解压到当前目录 命令:tar -zxvf mq 阅读详情

前提工作:

        相关资源:

               Windows服务器: https://download.youkuaiyun.com/download/JavaLLU/92728416

               windows图形化界面: https://download.youkuaiyun.com/download/JavaLLU/92728418

        在本地启动IBM MQ服务 并且 创建 队列 以及设置相关的权限

       安装教程请看:https://www.cnblogs.com/oceancaptain/p/17439428.html
        使用图形化界面IBM-MQ-Explorer创建队列

1.新建队列管理器,这里设置名字  MyTest 和端口 1416 就可以

        

2. 新建队列  输入队列名 BT01 即可

3. 创建通道 

这里选择服务器连接通道,名称 SERVERCONN 

这个通道新建后状态显示不活跃,只有你客户端连接后才自动变为正在运行

第一步. 配置pom依赖

        <!-- Apache Camel Spring Boot Starter -->
        <dependency>
            <groupId>org.apache.camel.springboot</groupId>
            <artifactId>camel-spring-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>

<!--       IBM MQ-->
        <!-- Camel JMS 组件 (用于连接 IBM MQ) -->
        <dependency>
            <groupId>org.apache.camel.springboot</groupId>
            <artifactId>camel-jms-starter</artifactId>
            <version>3.2.0</version>
        </dependency>

        <!-- IBM MQ 客户端 (必须手动引入,Camel 不包含此包) -->
        <dependency>
            <groupId>com.ibm.mq</groupId>
            <artifactId>com.ibm.mq.allclient</artifactId>
            <version>9.2.4.0</version>
        </dependency>
        <!-- Spring 对JMS的支持 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
        </dependency>

第二步 添加yml参数配置(我这里没有用到用户密码)

这里就是我们上面配置好的队列信息

# IBM MQ 客户端
ibmmq:
  host: 127.0.0.1           # 地址
  port: 1416                # 断口
  user: ''        # 账号
  password:  ''         # 密码
  channel: SERVERCONN         # 通道名称
  manager: MyTest     # 队列管理器
  ccsid: 1381               # 编码id
  receive-timeout: 1000     # 接收超时时间
  concurrency: 10-100       # 并发数 下限-上限
  queue:
    name: BT01    # 队列名称

第三步 创建客户端

import com.ibm.mq.jms.MQQueueConnectionFactory;
import com.ibm.msg.client.wmq.WMQConstants;
import org.apache.camel.component.jms.JmsComponent;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.connection.CachingConnectionFactory;
import org.springframework.jms.connection.SingleConnectionFactory;
import javax.jms.JMSException;

@Configuration
public class MQConnectionConfig {

    @Value("${ibmmq.host}")
    private String host;
    @Value("${ibmmq.port}")
    private int port;
    @Value("${ibmmq.manager}")
    private String queueManager;
    @Value("${ibmmq.channel}")
    private String channel;
    @Value("${ibmmq.user}")
    private String username;
    @Value("${ibmmq.password}")
    private String password;

    @Bean
    public MQQueueConnectionFactory mqQueueConnectionFactory() throws JMSException {
        MQQueueConnectionFactory factory = new MQQueueConnectionFactory();
        factory.setHostName(host);
        factory.setPort(port);
        factory.setQueueManager(queueManager);
        factory.setChannel(channel);
        factory.setTransportType(WMQConstants.WMQ_CM_CLIENT); // 使用客户端连接模式

        // 设置用户名和密码(如果需要)
        factory.setStringProperty(WMQConstants.USERID, username);
        factory.setStringProperty(WMQConstants.PASSWORD, password);

        // 可选:设置CCSID(编码),默认是819
        // factory.setCCSID(1208); // UTF-8
        return factory;
    }

    @Bean
    public CachingConnectionFactory cachingConnectionFactory(MQQueueConnectionFactory mqQueueConnectionFactory) {
        // 使用CachingConnectionFactory来缓存会话、连接和生产者,提升性能
        CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory();
        cachingConnectionFactory.setTargetConnectionFactory(mqQueueConnectionFactory);
        cachingConnectionFactory.setSessionCacheSize(10); // 根据需要调整缓存大小
        cachingConnectionFactory.setReconnectOnException(true); // 连接异常时尝试重连
        return cachingConnectionFactory;
    }

    @Bean(name = "ibmMQ")
    public JmsComponent jmsComponent(CachingConnectionFactory cachingConnectionFactory) {
        // 创建Camel的JMS组件,并指定bean名称,后续在路由中用 "ibmMQ:queue:..." 引用
        JmsComponent jmsComponent = new JmsComponent();
        jmsComponent.setConnectionFactory(cachingConnectionFactory);
        // 设置是否使用消息ID作为消息的JMSCorrelationID,根据业务需求设定
        jmsComponent.setUseMessageIDAsCorrelationID(false);
        return jmsComponent;
    }

第四步 创建队列处理组件


@Component
public class IbmMqRoute extends RouteBuilder {
    @Value("${ibmmq.queue.name}")
    private String queueName;
    @Resource
    private MqService mqService;

    @Override
    public void configure() throws Exception {
        // 使用配置好的JmsComponent "ibmMQ" 从队列中消费消息
        from("ibmMQ:queue:"+queueName)
                .routeId("ibmMqConsumer")
                .log("Received message from IBM MQ: ${body}")
                // .process(exchange -> { ... 你的业务逻辑 ... })
                .to("log:received"); // 也可以直接输出到日志
    }
}

问题:
Could not refresh JMS Connection for destination 'BT01' - retrying using FixedBackOff{interval=1000, currentAttempts=2, maxAttempts=unlimited}. Cause: JMSWMQ2013: 为队列管理器“test01”提供的安全性认证无效,连接方式为“Client”,主机名为“127.0.0.1(1414)”。; nested exception is com.ibm.mq.MQException: JMSCMQ0001: IBM MQ 调用失败,完成代码为“2”(“MQCC_FAILED”),原因码为“2035”(“MQRC_NOT_AUTHORIZED”)。
原因:

就是我们MQ权限设置的有问题,在网上看了好多不管用,参考这个博主的有效,直接去掉认证。
IBM MQ安装配置_ibmmq hostname-优快云博客
操作步骤:

 进入MQ安装bin路径下面执行命令:

1、
     alter qmgr chlauth(disabled) 
2、
    ALTER AUTHINFO(SYSTEM.DEFAULT.AUTHINFO.IDPWOS) AUTHTYPE(IDPWOS) CHCKCLNT(OPTIONAL)
    或者直接将连接认证选项置为空,将其完全关闭,指令如下:
    ALTER QMGR CONNAUTH(' ')    注:单引号内有空格
    在执行完上述两条命令中的任一条后,都需要刷新连接认证的缓存,指令如下:
    REFRESH SECURITY TYPE(CONNAUTH)

操作完后我们就可以连接了。
 

测试

在IBM Explorer中在新建的队列上发送消息

并网逆变器学习笔记8---平衡桥(独立中线模块)控制 参考文献:《带独立中线模块的三相四线制逆变器中线电压脉动抑制方法》---赵文心。 阅读详情

相关推荐

用GraphPad Prism直出单细胞亚群堆叠柱状图

用GraphPad Prism直出单细胞亚群堆叠柱状图

fivehuge的博客 4197

ActiveMQ 出现FixedBackOff 异常一直出现无限制的连接导致资源占用异常

2017-10-16 09:45:33,809 ERROR [org.springframework.jms.listener.DefaultMessageListenerContainer] - Could not refresh JMS Connection for destination 'topic://SOMC_OKH_TOPIC' - retrying using FixedBackO

u010011737的专栏 1万+

RGB接口电容触摸屏驱动(一)模块介绍

RGB接口电容触摸屏驱动(一)模块介绍

杰克拉力船长个人博客 7880

(七)使用IBMMQ javaAPI对集群进行异步消息的接收

前言:使用第六篇中组建的IBMMQ集群、IBMMQ官方提供的javaAPI,编写代码对集群发送消息并检测负载均衡的效果,若还不了解集群怎样搭建,请移步 : (六)IBMMQ简单集群搭建. 1. 准备工作 jar文件 (1). com.ibm.mq.jar (2).connector.jar 2.创建普通java工程,并添加jar到工程中 3. 接收消息的代码 该代码在接收消息达到1000条时会关闭,想要无限接收消息,可自行使用while循环中尝试 package com.qinke.mqclu.

ILYPTING的博客 1669

(秋招复习)一些SLAM基础

秋招复习--SLAM基础知识篇

weixin_45432823的博客 769

UE5 推荐的资产命名规范

在开发阶段中,随着 虚幻引擎(UE)(Unreal Engine (UE)) 项目日益复杂,内容浏览器(Content Browser) 中的 资产(Assets) 列表会不断扩充。这会导致资产出现各种变体版本,也会导致资产名称因过于相似而造成混淆。比如,你有一个文件夹名为"Soldier",这个文件夹中有蓝图、纹理和模型,它们的名称中都带"Soldier"一词,但在简单列表中,很难区别它们。

一碗清深的博客 3375

Java调用MQ队列

IBM MQ 6.0中设置两个队列,(远程队列、通道之类都不设置)。 队列管理器是XIR_QM_1502 队列名称是ESBREQ IP地址是10.23.117.134(远程的一台电脑,跟我的电脑不在一个局域网内) 端口1414 CCSID 1208 MQ配置可以参考这个,有配图http://wenku.baidu.com/view/06d108d0360cba1aa811daa

Yerasel的专栏 2万+

315、弱电基础知识介绍

常见的弱电系统包括:闭路电视监控系统、防盗报警系统、门禁系统、电子巡更系统、停车场管理系统、可视对讲系统、家庭智能化系统及安防系统、背景音乐系 统、LED显示系统、等离子拼接屏系统、DLP大屏系统、三表抄送系统、楼宇自控系统、防雷与接地系统、寻呼对讲及专业对讲系统、弱电管道系统、UPS不 间断电源系统、机房系统、综合布线系统、计算机局域网系统、物业管理系统、多功能会议室系统、有线电视系统、卫星电视系统、卫星通讯系统、消防系统、电话 通讯系统、酒店管理系统、视频点播系统、人力资源管理系统等等。

qq_43416206的博客 1367

AMQ的broker地址不可访问导致后端服务启动异常

先启动AMQ,再启动后端服务,后端服务启动正常 不启动AMQ,直接启动后端服务,后端服务在启动过程中卡住 写一个程序测试一下 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven

怀揣梦想,努力前行 2673

100天精通Python(爬虫篇)——第114天:爬虫基础模块之requests基础入门

一、request模块大总结 1. 下载安装 2. 常用属性或方法 3. response.text和response.content的区别: 4. 发送带headers参数请求 5. 发送带参数请求 6. 在headers参数中携带cookie 7. 超时参数timeout的使用 8. proxies代理参数的使用 9. 发送post请求...............

努力让自己发光,对的人才能迎着光而来 11万+

4.3 Langfuse 集成实战:追踪 OpenAI、LangChain 和 LangGraph 应用

本文介绍了如何将Langfuse集成到不同类型的AI应用中,包括原生OpenAI、LangChain和LangGraph应用。主要内容包括: 两种集成模式:手动追踪(精确控制)和自动追踪(通过回调机制) 三种应用场景的集成方案: 原生OpenAI应用:使用langfuse.trace()手动记录对话流程、LLM调用和工具执行 LangChain应用:通过LangfuseCallbackHandler自动追踪Agent执行过程 LangGraph应用:与LangChain相同的自动追踪方式,可可视化节点和状态

yonggeit的博客 3305

SpringBoot整合Apache Camel与IBM MQ:企业级消息集成实战指南

消息队列作为企业应用集成的核心组件,通过解耦生产者和消费者,实现了系统间的可靠异步通信。其原理基于发布/订阅或点对点模式,确保数据在分布式环境中的有序传递。这一技术价值在于提升系统可扩展性、缓解流量峰值,并增强业务组件的独立性。在金融、电信等关键领域,IBM MQ凭借高可靠性和强事务支持成为主流选择。然而,直接使用JMS API开发涉及繁琐的连接管理与样板代码。Apache Camel作为企业集成模式框架,通过声明式DSL简化了路由逻辑,结合SpringBoot的自动配置能力,能高效实现与IBM MQ的集成

weixin_32667955的博客 336

Java/PHP:微信支付v3显示 “商户证书序列号有误。请使用签名私钥匹配的证书序列号。“(Spring Boot、thinkPHP微信支付失败返回错误,例如退款、企业付款到零钱等各种微信支付业务)

商户证书序列号有误。请使用签名私钥匹配的证书序列号,php,Java微信支付v3显示"商户证书序列号有误。请使用签名私钥匹配的证书序列号。"请问如何解决?httResponseBody[{"code":"SIGN_ERROR","message":"商户证书序列号有误。请使用签名私钥匹配的证书序列号"}]微信V3支付报错 平台证书及平台证书序列,vue3微信支付报错,Uniapp支付报错,微信支付签名错误解决方法,微信支付v3证书报错,微信支付平台证书过期(报错:证书序列号错误)计算签名时,商户号、商户AP

✅ 精选推荐文章 4598

解决ActiveMQ服务停掉后无限重连问题

断线重连机制是ActiveMQ的高可用性具体体现之一。ActiveMQ提供failover机制去实现断线重连的高可用性,可以使得连接断开之后,不断的重试连接到一个或多个brokerURL。 默认情况下,如果client与broker直接的connection断开,则client会新起一个线程,不断的从url参数中获取一个url来重试连接。 但有时在做开发时可能不需要连接服务器,这时程序在后台出现了...

王浩的技术博客 5414

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

修改参数failed_login_attempts=unlimited

select resource_name,limit from dba_profiles where resource_name='FAILED_LOGIN_ATTEMPTS'; 从上面的查询结果可以看出,如果连续失败10次,用户就会被锁定。 修改参数failed_login_attempts=unlimited, 当然这样修改会降低安全性,不建议这么做。 al

少年休闲海 8096

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Spring Boot 4 集成:@AiService、多模型路由与多租户隔离

Spring Boot 4.1.x 与 LangChain4j 1.23.0 集成需规避多租户数据串扰、模型路由僵化与降级缺失三大陷阱。推荐采用“配置→路由→隔离→降级”四层架构,优先手动 @Bean 确保可控性。通过可配置的多模型路由策略(按场景、租户、成本、健康度)实现精准调度,并结合 Resilience4j 实现熔断与降级,辅以可观测性设计,保障系统稳定性与可维护性。

weixin_43128865的博客 118

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

40 张表、20 层 e2e:把一个开源 Agent 平台迁到 Spring Boot 4.1

升级 BizBuddy 从 Spring Boot 3.5 到 4.1.1,核心挑战不在代码修改,而在验证。虽仅四类变更(Jackson 3、Starter 拆分、空安全注解、依赖坐标更新),但耗时七成用于确保行为一致:Jackson 3 的不可变映射器、序列化签名变化、Redis 缓存兼容性、旧类名导致的反序列化异常均需逐项排查。关键资产是20层HTTP与18条UI端到端用例,保障了真实场景验证。部分依赖如AgentScope仍留用Jackson 2,通过边界隔离避免硬改。建议尽早迁移,避免未来更复杂的技

长弓三石 237

Spring Boot 3.3 启动报 BeanCurrentlyInCreation:循环依赖默认被禁的代价

从 2.5 升到 3.3 启动即报循环依赖异常,它只提示环路一端。需结合堆栈还原完整依赖环,再按真实耦合点选择解环手段。此类放行仅适用于紧急止血,构造器注入的环仍须重构。

昨日种种,皆成今我。今日种种,皆成新我。 233

Spring Boot 提速记:启动 40 秒到 8 秒,GC 停顿从 850ms 降到 60ms

面向线上 Spring Boot 服务,给出启动侧延迟初始化与 AOT 编译、运行侧 GC 与虚拟线程选型,再用分层压测验证收益,附可复制的参数与代码。

2301_78967866的博客 372

ZeusSpring框架深度解析:基于Spring Boot的高效模块化企业级开发解决方案与实战指南

1.1 项目背景与定位在现代企业级应用开发中,如何在保证代码质量的同时提升开发效率,是每一个技术团队面临的核心挑战。ZeusSpring正是为了解决这一痛点而生。这是一个由开发者AichaelLee创建并维护的,基于Spring Boot生态的高度可扩展、模块化的开发框架。它并非简单的代码堆砌,而是对Spring Boot进行了深度的增强与封装,旨在为开发者提供一套“开箱即用”且架构清晰的基础设施。1.2 核心价值主张ZeusSpring的核心设计理念在于“模块化”与“高效”。

wulechun的博客 196

Spring Boot 4 + OpenTelemetry + OpenFeign:自动传播 TraceId 的完整实践

本文演示Spring Boot 4 + OpenTelemetry + OpenFeign环境下,通过引入feign-micrometer依赖,实现调用方通过OpenFeign自动传播traceparent请求头,确保跨服务调用链路中TraceId一致。验证显示:被调方日志中包含traceparent,且两端TraceId相同、SpanId不同,符合W3C Trace Context规范,完整实现链路追踪。

宋冠巡的博客 393

毕设选题:基于 Spring Boot 与机器视觉的智慧农场作物病害识别系统设计与实现

本项目基于Spring Boot与机器视觉,设计实现智慧农场作物病害识别系统。集成EfficientNet-B3分类与YOLOv8检测模型,依托54,305张样本、38种病害数据,实现1.8秒内精准识别,准确率达96.8%。系统构建“拍照—识别—开方—复核—回访”闭环流程,结合320条防治方案库与农技员协同复核,提升防治效率与准确性。前后端分离架构,支持24个农场、12,600亩监测面积,累计识别8.6万次,具备高落地性与教学科研价值。

小凯的博客 321

Spring Boot 和 Spring Cloud 是什么关系

Spring Boot 与 Spring Cloud 是协同关系,非替代或升级。Boot 负责单个服务的快速启动与配置,Cloud 则解决多服务间的注册发现、调用、容错等分布式问题。两者能力不重叠:Boot 管进程内,Cloud 管进程间。Cloud 组件基于 Boot 的自动配置机制实现,依赖版本严格匹配,不可随意升级。是否使用 Cloud,取决于是否有跨服务治理需求,而非项目规模。小系统或已用 K8s 可无需引入完整 Cloud。

2401_89855466的博客 240

Spring Boot 3.x 多模型统一接入实战:Spring AI 1.x 与 LangChain4j 选型对比

多模型统一接入层的本质,是把"模型"从一个 SDK 依赖变成一个可配置、可路由、可降级的运行时依赖。版本对齐是前提,Spring AI 2.0.x 与 Spring Boot 3.x 不共存,别照抄跨路线的依赖;协议兼容是杠杆,但"OpenAI 兼容"必须逐家核对,差异要显式管理而不是假装不存在;抽象层决定演进上限,接入层做对了,RAG、MCP、Agent 编排才是在其上叠加能力,而不是推倒重来。

m0_74899094的博客 310

ChatGPT、Codex并发排查:Spring Boot接口没有报错,为什么线程池队列越来越长,最后整批请求超时?

Spring Boot接口没有报错,CPU和数据库连接池也正常,为什么线程池队列却越来越长?本文从订单服务任务积压故障切入,分析无界队列、最大线程数、CallerRunsPolicy、下游阻塞和任务背压机制,并介绍通过Codex辅助定位线程池瓶颈的方法。

2601_96380027的博客 172

Spring Boot 系统监控与可观测性

基础的 JVM 和 HTTP 指标看不出来 Outbox 是否出问题,所以 Study 服务里添加,通过Micrometer Gauge + 定时 SQL 统计监控事件状态。status状态含义0PENDING等待发送1SENDING已被某个发布器领取2SENTBroker 已确认并通过路由检查3FAILED达到最大重试次数,待人工处理",其他SENDING、`FAILED` 指标同理;实际代码里需要异常处理,避免指标采集影响业务调度。Gauge。

m0_64642997的博客 356
上一篇: Linux使用U盘安装centos及报错You might want to saue “/run/initramfs/rdsosreport.txt“ 处理
下一篇: Springboot+ehcache 实现集群消息同步
Java程序之猿
博客等级 码龄9年 2599粉丝 140原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值