本文应用springboot集成IBM MQ的客户端, 简略的实现音讯接管和发送逻辑.
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> <version>9.0.4.0</version> </dependency>
配置文件
这里的配置和上文中创立的队列信息统一
server.port=9111## mq的连贯ipproject.mq.host=192.168.0.106## mq的连贯端口project.mq.port=1414## mq的队列管理器名字project.mq.queue-manager=QM144## mq的java客户端连贯通道project.mq.channel=SYSTEM_DEF_SVRCONN## mq的用户名project.mq.username=mqm## mq的明码project.mq.password=Paic2023q2## mq的接管超时工夫project.mq.receive-timeout=20000## 收发队列名称(可选)project.mq.queuename=QUEUE1
配置类
@Configurationpublic 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; @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; }}
发送音讯
public void sendMq(@RequestParam String msg) { log.info("取得报文并开始向mq发送:"+msg); jmsTemplate.setDeliveryMode(DeliveryMode.NON_PERSISTENT); jmsTemplate.setExplicitQosEnabled(true); jmsTemplate.send("QUEUE1", session -> { TextMessage m = session.createTextMessage(); m.setText(msg); m.setJMSCorrelationID("1111"); return m; });// Message message = jmsTemplate.receiveSelected("QUEUE1", "JMSCorrelationID='2222'");// System.err.println("---->" + message.toString()); log.info("======推送mq报文实现======"); }
接管音讯
@Slf4j@Componentpublic class MQListener extends MessageListenerAdapter { @Autowired JmsOperations jmsOperations; @Autowired private JmsTemplate jmsTemplate; @Override @JmsListener(destination = "${project.mq.queuename}", selector = "JMSCorrelationID='1111'") public void onMessage(Message message) { log.info("从MQ接管的message报文:"+message); jmsTemplate.send("QUEUE1", session -> { TextMessage m = session.createTextMessage(); m.setText("return data"); m.setJMSCorrelationID("2222"); return m; }); }}
代码地址: https://gitee.com/sharloon/ibm-mq80-demo.git
本文由mdnice多平台公布