Spring JMS与IBM MQ 整合,监听

[size=x-large]项目中因为要监听IBM MQ 队列的消息,想到用Spring JMS来做[/size]

[b]Spring JMS介绍[/b]
Spring对JMS(Java Message Service)的封装,简化了代码量,便于使用 :wink:

[b]下面直接贴代码来说明[/b]
[*]定义MQ连接工厂

<bean id="testFeMQQueueConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">
<property name="hostName" value="${HOSTNAME}" />
<property name="port" value="${PORT}" />
<property name="queueManager" value="${MQMANAGERNAME}" />
<property name="channel" value="${CHANNEL}" />
<property name="CCSID" value="${CCSID}" />
<property name="transportType" value="1" />
</bean>

[*]定义工厂适配器

<bean id="testUserCredentialsConnectionFactoryAdapter"
class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
<property name="targetConnectionFactory" ref="testMQQueueConnectionFactory" />
</bean>

[*]队列定义

<bean id="testMQQueue" class="com.ibm.mq.jms.MQQueue">
<constructor-arg name="queueManagerName" value="${MQMANAGERNAME}" />
<constructor-arg name="queueName" value="${MQ_QUEUE_NAME}" />
</bean>

[*]队列监听容器

<bean id="testListenserContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer"
lazy-init="false">
<property name="connectionFactory"
ref="testUserCredentialsConnectionFactoryAdapter" />
<property name="destination" ref="testMQQueue" />
<property name="messageListener" ref="testMessageListener" />
<property name="sessionTransacted" value="false" />
<!-- 设置固定的线程数 -->
<property name="concurrentConsumers" value="10"></property>
</bean>

[*]消息监听

package com.liyghting.mq.listener;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;


@Service
public class TestMessageListener implements MessageListener {
private static final Logger logger = LoggerFactory.getLogger(TestMessageListener .class);
@Override
public void onMessage(Message message) {
TextMessage textMessage = (TextMessage)message;
try {
String msg = textMessage.getText();
logger.info("消息[{}]",msg);
} catch (JMSException e) {
logger.error("消息监听异常", e);
}
}
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,针对你的问题,我可以给你提供一些思路和步骤,具体实现方式可能需要根据你的具体情况进行定制化。 1. 首先需要在Spring配置文件中引入IBM MQ的相关依赖,如下: ``` <dependency> <groupId>com.ibm.mq</groupId> <artifactId>com.ibm.mq.allclient</artifactId> <version>9.2.0.0</version> </dependency> ``` 2. 接下来需要配置MQ的连接工厂,这里以IBM MQ为例,示例配置如下: ``` <bean id="mqConnectionFactory" class="com.ibm.mq.jms.MQConnectionFactory"> <property name="transportType" value="1" /> <property name="hostName" value="localhost" /> <property name="port" value="1414" /> <property name="queueManager" value="QM_TEST" /> <property name="channel" value="SYSTEM.DEF.SVRCONN" /> <property name="userName" value="mquser" /> <property name="password" value="mqpassword" /> </bean> ``` 其中,transportType表示MQ的传输协议类型,hostName和port表示MQ服务器的地址和端口,queueManager表示队列管理器的名称,channel表示通道的名称,userName和password表示连接的用户名和密码。 3. 接下来需要配置JMS的连接工厂和目的地,示例配置如下: ``` <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory"> <property name="targetConnectionFactory" ref="mqConnectionFactory" /> </bean> <bean id="destination" class="com.ibm.mq.jms.MQQueue"> <constructor-arg value="QUEUE.TEST" /> </bean> ``` 其中,connectionFactory表示JMS的连接工厂,targetConnectionFactory引用了上一步配置MQ的连接工厂,destination表示JMS的目的地,这里以队列为例,队列名称为QUEUE.TEST。 4. 最后需要配置JMS的消息监听器和消息处理器,示例配置如下: ``` <bean id="jmsListenerContainerFactory" class="org.springframework.jms.config.DefaultJmsListenerContainerFactory"> <property name="connectionFactory" ref="connectionFactory" /> </bean> <bean id="messageListener" class="com.example.jms.MessageListener" /> <jms:listener-container container-factory="jmsListenerContainerFactory"> <jms:listener destination="QUEUE.TEST" ref="messageListener" /> </jms:listener-container> ``` 其中,jmsListenerContainerFactory表示JMS监听容器工厂,messageListener表示消息监听器,这里需要自己实现一个MessageListener的子类来处理收到的消息。最后,使用jms:listener-container配置消息监听容器,并引用上述的监听器和目的地。 以上就是整合SpringIBM MQ的大致步骤,具体实现方式可能需要根据你的具体情况进行定制化。希望能对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值