IBM WebSphere MQ安装集成
Posted 家乐先生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IBM WebSphere MQ安装集成相关的知识,希望对你有一定的参考价值。
#简介
IBM MQ(IBM Message Queue)是IBM的一款商业消息中间产品,适用于分布式计算环境或异构系统之中。
消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。
#安装
1、官网下载地址:https://www.ibm.com/support/pages/node/318077
2、下载完成之后,创建一个用户,选择组为mqm,如下图所示:
#配置MQ
#创建队列管理器
- 启动 MQ Explorer。
- 在“导航器”视图中,右键单击队列管理器文件夹,然后单击
- 在队列管理器名称字段中,输入QM_JACK。
- 单击两次下一步。
- 确保从选择队列管理器启动类型选项中选择自动。
- 单击下一步。
- 确保选中创建配置用于 TCP/IP 的侦听器复选框。
- 如果完成按钮不可用,那么在侦听端口号字段中输入另一个端口号。
如果当前值为 1414,那么尝试使用另一个端口号,例如:1415 或 1416。如果此阶段未使用缺省端口号 1414 - 单击完成。
#创建本地队列
- 在“导航器”视图中,展开队列管理器文件夹。
- 展开队列管理器 QM_JACK。
- 右键单击队列文件夹,然后单击
- 在名称字段中,输入 QUEUE_RECV。
- 单击完成。
#将测试消息放入队列
- 在“导航器”视图中,展开队列管理器文件夹。
- 展开所创建的队列管理器 QM_JACK。
- 单击队列文件夹。
这样会在“内容”视图中列出队列管理器的队列。 - 在“内容”视图中,右键单击本地队列 QUEUE_RECV,然后单击放入测试消息。
这样会打开“放入测试消息”对话框。 - 在消息数据字段中,输入一些文本,例如:这是测试消息,然后单击放入消息。
系统会清空消息数据字段,并将消息放入队列。 - 单击关闭。
#验证是否已发送测试消息
- 在“导航器”视图中,展开队列管理器文件夹,然后再展开 QM_JACK。
- 单击队列文件夹。
- 在“内容”视图中,右键单击 QUEUE_RECV,然后单击浏览消息。
这样会打开“消息”浏览器,显示当前 QUEUE_RECV上的消息列表。 - 双击最后一条消息以打开其属性对话框。
#创建服务器连接通道
- 在“导航器”视图中,展开队列管理器文件夹。
- 展开所创建的队列管理器 QM_JACK。
- 右击通道-新建-服务器连接通道,输入CNN_JACK
- 单击完成
#检查侦听器
- 在“导航器”视图中,展开队列管理器文件夹,然后再展开 QM_JACK。
- 单击侦听器文件夹。
- 查看侦听器状态是否正在运行,如果不是,可能端口冲突,修改端口
#集成指南
#pom配置
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> </dependency> <dependency> <groupId>javax.jms</groupId> <artifactId>javax.jms-api</artifactId> </dependency> <dependency> <groupId>com.ibm.mq</groupId> <artifactId>com.ibm.mq.allclient</artifactId> </dependency>
#配置文件
mq: ibm: host: 127.0.0.1 #侦听器端口号 port: 8888 #(队列管理器名称) queue-manager: QM_JACK #(队列名称) queue-name: QUEUE_RECV #(通道名称) channel: CNN_JACK #创建的MQ用户 username: Administrator #创建的MQ用户连接密码 password: 123 receive-timeout: 20000
#配置类
import com.ibm.mq.jms.MQQueueConnectionFactory; import com.ibm.msg.client.wmq.WMQConstants; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.jms.connection.CachingConnectionFactory; import org.springframework.jms.connection.JmsTransactionManager; import org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter; import org.springframework.jms.core.JmsOperations; import org.springframework.jms.core.JmsTemplate; import org.springframework.transaction.PlatformTransactionManager; @Configuration public class JmsConfig { @Value("${mq.ibm.host}") private String host; @Value("${mq.ibm.port}") private Integer port; @Value("${mq.ibm.queue-manager}") private String queueManager; @Value("${mq.ibm.channel}") private String channel; @Value("${mq.ibm.username}") private String username; @Value("${mq.ibm.password}") private String password; @Value("${mq.ibm.receive-timeout}") private long receiveTimeout; @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; } @Bean UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter(MQQueueConnectionFactory mqQueueConnectionFactory) { UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter = new UserCredentialsConnectionFactoryAdapter(); userCredentialsConnectionFactoryAdapter.setUsername(username); userCredentialsConnectionFactoryAdapter.setPassword(password); userCredentialsConnectionFactoryAdapter.setTargetConnectionFactory(mqQueueConnectionFactory); return userCredentialsConnectionFactoryAdapter; } @Bean @Primary public CachingConnectionFactory cachingConnectionFactory(UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter) { CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory(); cachingConnectionFactory.setTargetConnectionFactory(userCredentialsConnectionFactoryAdapter); cachingConnectionFactory.setSessionCacheSize(500); cachingConnectionFactory.setReconnectOnException(true); return cachingConnectionFactory; } @Bean public PlatformTransactionManager jmsTransactionManager(CachingConnectionFactory cachingConnectionFactory) { JmsTransactionManager jmsTransactionManager = new JmsTransactionManager(); jmsTransactionManager.setConnectionFactory(cachingConnectionFactory); return jmsTransactionManager; } @Bean public JmsOperations jmsOperations(CachingConnectionFactory cachingConnectionFactory) { JmsTemplate jmsTemplate = new JmsTemplate(cachingConnectionFactory); jmsTemplate.setReceiveTimeout(receiveTimeout); return jmsTemplate; } }
#发送消息
import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.jms.core.JmsOperations; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; @Slf4j @Component public class SendMessage { @Autowired JmsOperations jmsOperations; @Value("${mq.ibm.queue-name}") String queueName; @PostConstruct public void send() { log.info("开始发送IBM WebSphere MQ消息..."); jmsOperations.convertAndSend(queueName, "这是一个IBM WebSphere MQ消息"); } }
#接收消息
import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jms.annotation.JmsListener; import org.springframework.jms.core.JmsOperations; import org.springframework.jms.listener.adapter.MessageListenerAdapter; import org.springframework.stereotype.Component; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.TextMessage; @Slf4j @Component public class ReceiveMessage extends MessageListenerAdapter { @Autowired JmsOperations jmsOperations; @Override @JmsListener(destination = "${mq.ibm.queue-name}") public void onMessage(Message message) { log.info("接收到IBM WebSphere MQ消息:{}", message.toString()); try { log.info("IBM WebSphere MQ消息内容为:{}", ((TextMessage) message).getText()); } catch (JMSException e) { e.printStackTrace(); } } }
以上是关于IBM WebSphere MQ安装集成的主要内容,如果未能解决你的问题,请参考以下文章