javascript
java 集成ibm mq 教程_Spring Boot JMS与IBM WebSphere MQ集成配置
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集成配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ppt时间线
- 下一篇: gradle idea java ssm