Spring Boot JMS与IBM WebSphere MQ集成配置

[TOC]

前言

Spring Boot作为简化Spring开发的框架,已经为我们集成了ActiveMQ和RabbitMQ。只需在Spring Boot配置几个MQ的连接方式即可开箱即用。大大简化了开发配置过程。 Spring的JavaConfig相比传统的XML的配置方式使得配置更加的可靠和方便。 本文将会说明如何用JavaConfig的方式将Spring与IBM WebSphere MQ(以下简称IBM MQ)集成配置,也可以作为其他MQ的配置参考。

开发工具

IntelliJ Idea

JDK 1.8.0_121

Maven

解决依赖

获取IBM MQ依赖包

IBM MQ相关的连接依赖包为com.ibm.mq.allclient.jar,该包不存在于公共Maven仓库,所以我们需要找到该依赖包并手动安装到我们本机的Maven仓库中。 该依赖包位于[IBM MQ 安装路径]\java\lib下,Windows下的默认安装路径为C:\Program Files\IBM\WebSphere MQ\,Linux下的默认安装路径为/opt/mqm/。可以将该包复制到开发机上。 通过以下命令安装该包到本地仓库

mvn install:install-file -Dfile=[jar包所在路径] -DgroupId=com.ibm -DartifactId=mq.allclient -Dversion=1.0 -Dpackaging=jar

在Idea中可以按四次Shift键调出全局搜索框,键入Execute Maven Goal,等待搜索结果后按回车,即可执行Maven命令,在此执行命令时不需要键入命令开头的mvn。

添加依赖到项目

编辑项目pom.xml文件,添加以下三个依赖,分别为

spring-boot-starter-activemq:即Spring JMS

javax.jms-api

mq.allclient:即上一步中安装到本地的包

org.springframework.boot

spring-boot-starter-activemq

javax.jms

javax.jms-api

2.0.1

com.ibm

mq.allclient

1.0

MQ连接参数

配置Spring Boot配置文件,application.yml,此处用的是yaml格式配置文件,application.properties的配置方法可以参考Spring Boot的说明。

project:

mq:

host: 192.168.1.180

port: 1416

queue-manager: QM #队列管理器

channel: mqm.SVRCONN #服务器连接通道

username: mqm #用户名

password: 123456 #密码

receive-timeout: 2000 #连接超时

JmsConfig

注入连接参数

建立JmsConfig类,添加注解@Configuration,并将以上属性注入到此类。

@Configuration

public class JmsConfig {

@Value("${project.mq.host}")

private String host;

@Value("${project.mq.port}")

private Integer port;

@Value("${project.mq.queue-manager}")

private String queueManager;

@Value("${project.mq.channel}")

private String channel;

@Value("${project.mq.username}")

private String username;

@Value("${project.mq.password}")

private String password;

@Value("${project.mq.receive-timeout}")

private long receiveTimeout;

}

配置连接工厂

在JmsConfig类添加以下方法。

CCSID要与连接到的队列管理器一致,Windows下默认为1381,Linux下默认为1208。1208表示UTF-8字符集,建议把队列管理器的CCSID改为1208

@Bean

public MQQueueConnectionFactory mqQueueConnectionFactory() {

MQQueueConnectionFactory mqQueueConnectionFactory = new MQQueueConnectionFactory();

mqQueueConnectionFactory.setHostName(host);

try {

mqQueueConnectionFactory.setTransportType(WMQConstants.WMQ_CM_CLIENT);

mqQueueConnectionFactory.setCCSID(1208);

mqQueueConnectionFactory.setChannel(channel);

mqQueueConnectionFactory.setPort(port);

mqQueueConnectionFactory.setQueueManager(queueManager);

} catch (Exception e) {

e.printStackTrace();

}

return mqQueueConnectionFactory;

}

配置连接认证

如不需要账户密码链接可以跳过此步,直接将mqQueueConnectionFactory注入下一步的缓存连接工厂。

@Bean

UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter(MQQueueConnectionFactory mqQueueConnectionFactory) {

UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter = new UserCredentialsConnectionFactoryAdapter();

userCredentialsConnectionFactoryAdapter.setUsername(username);

userCredentialsConnectionFactoryAdapter.setPassword(password);

userCredentialsConnectionFactoryAdapter.setTargetConnectionFactory(mqQueueConnectionFactory);

return userCredentialsConnectionFactoryAdapter;

}

配置缓存连接工厂

不配置该类则每次与MQ交互都需要重新创建连接,大幅降低速度。

@Bean

@Primary

public CachingConnectionFactory cachingConnectionFactory(UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter) {

CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory();

cachingConnectionFactory.setTargetConnectionFactory(userCredentialsConnectionFactoryAdapter);

cachingConnectionFactory.setSessionCacheSize(500);

cachingConnectionFactory.setReconnectOnException(true);

return cachingConnectionFactory;

}

配置事务管理器

不使用事务可以跳过该步骤。如需使用事务,可添加注解@EnableTransactionManagement到程序入口类中,事务的具体用法可参考Spring Trasaction。

@Bean

public PlatformTransactionManager jmsTransactionManager(CachingConnectionFactory cachingConnectionFactory) {

JmsTransactionManager jmsTransactionManager = new JmsTransactionManager();

jmsTransactionManager.setConnectionFactory(cachingConnectionFactory);

return jmsTransactionManager;

}

配置JMS模板

JmsOperations为JmsTemplate的实现接口。

重要:不设置setReceiveTimeout时,当队列为空,从队列中取出消息的方法将会一直挂起直到队列内有消息

@Bean

public JmsOperations jmsOperations(CachingConnectionFactory cachingConnectionFactory) {

JmsTemplate jmsTemplate = new JmsTemplate(cachingConnectionFactory);

jmsTemplate.setReceiveTimeout(receiveTimeout);

return jmsTemplate;

}

用法

发送消息

可直接使用jmsOperations的convertAndSend(String, Object)方法,第一个参数为队列名称,第二个参数为需发送的对象。

重要:发送的对象需实现序列化接口

@Autowired

JmsOperations jmsOperations;

public void send(User user){

jmsOperations.convertAndSend("QUEUE.USER", user);

}

接收消息

可直接使用jmsOperations的receiveAndConvert(String)方法,第一个参数为队列名称。

@Autowired

JmsOperations jmsOperations;

public void receive(User user){

jmsOperations.receiveAndConvert("QUEUE.USER");

}

开启事务

如需使用事务,只需在方法添加注解@Transactional(value = "jmsTransactionManager")即可。

有问题请留言

java 集成ibm mq 教程_Spring Boot JMS与IBM WebSphere MQ集成配置相关推荐

  1. java服务端监听_Java客户端正在监听WebSphere MQ服务器?

    我需要编写一个监听WebSphere MQ服务器的Java客户机.消息放入服务器的队列中.Java客户端正在监听WebSphere MQ服务器? 我开发了这个代码,但我不确定它是否正确.如果正确,那我 ...

  2. java restful接口开发实例_Spring Boot 中 10 行代码构建 RESTful 风格应用!

    点击上方"Java后端技术",选择"置顶或者星标" 你关注的就是我关心的! 作者:江南一点雨 微信公众号:牧码小子(ID:a_javaboy) 推荐阅读:10个 ...

  3. java主流微服务框架_Spring Boot作为当下最流行的微服务开发框架,一名合格的Java开发者一定有所了解,...

    Spring Boot作为当下最流行的微服务开发框架,一名合格的Java开发者一定有所了解, Spring Boot相对于传统的SSM框架来说:springboot使用了特定的配置方式,开发人员不需要 ...

  4. java spring 面向切面编程_Spring Boot实战系列(3)AOP面向切面编程

    AOP是一种与语言无关的程序思想.编程范式.项目业务逻辑中,将通用的模块以水平切割的方式进行分离统一处理,常用于日志.权限控制.异常处理等业务中. 快速导航 编程范式主要以下几大类 AOP(Aspec ...

  5. java批量上传文件_Spring boot 实现单个或批量文件上传功能

    一:添加依赖: org.springframework.boot spring-boot-starter-thymeleaf javax.servlet jstl org.apache.tomcat. ...

  6. java 搭建个人博客_Spring boot 搭建个人博客系统(一)——整体思路

    Spring boot 搭建个人博客系统(一)--整体思路 一直想用Spring boot 搭建一个属于自己的博客系统,刚好前段时间学习了叶神的牛客项目课受益匪浅,乘热打铁也主要是学习,好让自己熟悉这 ...

  7. java 事件监听应用_Spring Boot应用事件监听示例详解

    前言 本文主要给大家介绍了关于Spring Boot应用事件监听的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 1. Spring Boot特有的应用事件 除了Spring ...

  8. java前后端分离框架_Spring Boot 入门及前后端分离项目实践

    本课程是一个 Spring Boot 技术栈的实战类课程,课程共分为 3 个部分,前面两个部分为基础环境准备和相关概念介绍,第三个部分是 Spring Boot 项目实践开发.Spring Boot ...

  9. java中502错误原因_Spring Boot连接超时导致502错误的实战案例

    Spring Boot连接超时导致502错误的实战案例,错误,时间,客户端,站长站,原因 Spring Boot连接超时导致502错误的实战案例 易采站长站,站长之家为您整理了Spring Boot连 ...

最新文章

  1. Spring 中的 bean 为什么默认单例?
  2. python常见的数据转化函数
  3. Servlet详解之两个init方法的作用
  4. 怎么做mysql查询系统_mysql数据库系统学习(一)---一条SQL查询语句是如何执行的?...
  5. 洛谷P1912:诗人小G(二分栈、决策单调性)
  6. Eclipse 答疑:Eclipse 如何更换夜间及外部主题?如何修改代码样式、背景颜色、字体大小?为何注释文字大小不一?
  7. 基于差分分级和关联规则挖掘的气象数据关联性分析实战
  8. 无油螺杆鼓风机-市场现状及未来发展趋势
  9. 占鳌头。当雪花沁透着
  10. 大数据在保险应用场景
  11. 初中三年级数学可以用计算机吗,不到3分钟,这份初中数学攻略被家长和学生疯狂转发!太实用了!...
  12. nginx全局配置文件通解
  13. 基于Linux 5.4.18的nvme驱动学习 - Linux相关概念 (一)
  14. 【CFD理论】对流项-02
  15. ARM M3小计(一)1~3章。
  16. Java游戏开发之一
  17. 2021-05-14关于java的成员内部类总结
  18. 介绍一位超级大美女的经历!
  19. 【改进篇】Python实现VRP常见求解算法——禁忌搜索算法(TS)
  20. 你看到了菜鸟LOGO更新,我看到了马云再造物流业的雄心

热门文章

  1. python自动化配置路由器_华为 Python网络自动化
  2. 微信小程序与后端交互(ssm)
  3. 推荐一款简单高效在线APP原型工具
  4. 中值联:首个区块链诚信认证平台成立
  5. Python-新浪微博爬虫采集数据
  6. c语言程序设计第五版实验报告九,C语言程序设计实验报告-实验九.doc
  7. “基环树”的简单应用——MAFIJA和WYF互相追逐的头题解
  8. 硝烟弥漫 三大运营商开启新一轮宽带市场争夺赛
  9. 一个=电视+私人影院+KTV+游戏厅,爽!
  10. CSS常用内容总结(扫盲)