1、依赖包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.7.0</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
<version>5.7.0</version>
</dependency>
具体使用的ActiveMQ版本根据自己的实际情况调整。
2、消息中心配置
配置连接工程,并指明MQ的连接地址、用户名和密码。
<!-- mq 消息中心 -->
<bean id="connectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
destroy-method="stop">
<property name="connectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="${jms.brokerURL}" />
<property name="userName" value="${jms.userName}"/>
<property name="password" value="${jms.password}"/>
</bean>
</property>
</bean>
<!-- Spring提供的JMS工具类,它可以进行消息发送、接收 -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<!--true为topic,默认false为queue-->
<property name="pubSubDomain" value="false" />
<property name="connectionFactory" ref="connectionFactory"/>
</bean>
3、消息发送
<!-- 定义消息发送者 -->
<bean id="jmsMessageProducer" class="net.zoneland.uum_nxyd.uum.biz.common.service.jms.JmsMessageProducer">
<property name="jmsTemplate" ref="jmsTemplate"/>
</bean>
JmsMessageProducer为自定义的消息发送类,使用注入的jmsTemplate实现发送业务,具体如下:
/**
* 发送消息到指定的队列名
* @param queueName
* @param msg
* @return 如果发送成功,返回消息的编号,否则返回NULL.
*/
public TextMessage sendMessage(String queueName, String msg) {
if (null == queueName || queueName.trim().equals("")) {
return null;
}
String[] queueNames = queueName.split("#");
TextMessage[] rev = sendMessage(queueNames, msg);
if (null != rev) {
return rev[0];
}
return null;
}
4、消息接收
<!--定义消息消费者-->
<bean id="jmsConsumer" class="net.zoneland.uum_nxyd.uum.biz.common.service.jms.JmsMessageConsumer"></bean>
<!--监听队列 -->
<bean id="jmsDestination" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg>
<value>queue.subsystem.response</value>
</constructor-arg>
</bean>
<!--监听器 -->
<bean id="listenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="destination" ref="jmsDestination"/>
<property name="messageListener" ref="jmsConsumer" />
</bean>
JmsMessageConsumer为自定义的消息接收类,并且要实现MessageListener接口并@Override其中的onMessage,具体如下:
/**
* 监听队列处理业务系统返回消息
*/
@Override
public void onMessage(Message message) {
try {
TextMessage txtMsg = (TextMessage) message;
String jsonResponse = StringEscapeUtils.unescapeHtml(txtMsg.getText());
logger.info(">>>>>>>>>>收到反馈消息:" + jsonResponse);
} catch (JMSException e) {
logger.error("解析返回的日志消息出错!", e);
}
}