Spring集成JMS

来源:互联网 发布:js bind方法详解 编辑:程序博客网 时间:2024/05/21 17:01

下载  http://activemq.apache.org/activemq-591-release.html

启动:bin/activemq.bat

依赖包:lib/*


spring 中 来 定 义消 息 中 介 , 也 就 是 我 们 的connectionFactory,以及消息类型是队列还是订阅方式。


<!-- 消息中介JMS --><bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"><property name="brokerURL" value="tcp://localhost:61616" /></bean><!-- 队列 目的地 --><bean id="myQueue" class="org.apache.activemq.command.ActiveMQQueue"><constructor-arg index="0" value="notifyQueue" /></bean><!-- 订阅 目的地 --><bean id="myTopic" class="org.apache.activemq.command.ActiveMQTopic"><constructor-arg index="0" value="notifyTopic" /></bean>


使用Spring提供的模板

<!-- Spring 提供的 JMS 的模板 --><bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"><property name="connectionFactory" ref="connectionFactory" /><!-- 设置默认的消息目的地 --><property name="defaultDestination" ref="myQueue" /><!--消息转换 --><property name="messageConverter" ref="messageConventer" /><!-- 由于receiver方法是同步的,所以我们在这里对接收设置超时时间 --><property name="receiveTimeout" value="60000" /></bean>

配置消息监听器

<!-- 消息接收监听器 用于异步接收消息  --><bean class="org.springframework.jms.listener.SimpleMessageListenerContainer"><property name="connectionFactory" ref="connectionFactory" /><property name="destination" ref="myQueue" /><!-- <property name="messageListener" ref="studentMDP"/> --><!--纯 POJO,中间要用适配器 --><property name="messageListener" ref="pureMDPAdapter" /></bean><!-- 消息驱动pojo --><bean id="pureStudentMDP" class="com.mvc.jms.PureStudentMDP" /><bean id="pureMDPAdapter"class="org.springframework.jms.listener.adapter.MessageListenerAdapter"><property name="delegate" ref="pureStudentMDP" /><property name="defaultListenerMethod" value="process" /><!-- 消息转换.注意发送的时候也要用消息转换的方式发送 --><property name="messageConverter" ref="messageConventer" /></bean><!-- 转换消息 --><bean id="messageConventer" class="com.mvc.jms.MessageConverter" />

package com.mvc.jms;import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;import com.mvc.service.DcKnowledgePointService;public class PureStudentMDP {@Autowiredprivate DcKnowledgePointService dcKnowledgePointService;public void process(Map map) {System.out.println("========"+map);}}

消息转换

package com.mvc.jms;import java.util.HashMap;import java.util.Map;import javax.jms.JMSException;import javax.jms.MapMessage;import javax.jms.Message;import javax.jms.Session;import org.springframework.jms.support.converter.MessageConversionException;public class MessageConverter implements org.springframework.jms.support.converter.MessageConverter {public Object fromMessage(Message message) throws JMSException, MessageConversionException {if (!(message instanceof MapMessage)) {throw new MessageConversionException("Message is not a MapMessage");}MapMessage mapMessage = (MapMessage) message;Map<String, Object> map = (Map<String, Object>) mapMessage.getObject("map");return map;}public Message toMessage(Object object, Session session) throws JMSException,MessageConversionException {Map<String, Object> map = (Map<String, Object>) object;MapMessage message = session.createMapMessage();message.setObject("map", map);return message;}}




设置消息发送者

<!-- 消息发送者 --><bean id="consumer" class="com.mvc.jms.JMSProducer"><property name="jmsTemplate" ref="jmsTemplate" /></bean>
package com.mvc.jms;import java.util.Map;import org.springframework.jms.core.JmsTemplate;public class JMSProducer {private JmsTemplate jmsTemplate;public JmsTemplate getJmsTemplate() {return jmsTemplate;}public void setJmsTemplate(JmsTemplate jmsTemplate) {this.jmsTemplate = jmsTemplate;}public void send(final Map<String, Object> map) {this.getJmsTemplate().convertAndSend(map);}}

测试

@Controllerpublic class JmsWebService {@Autowiredprivate JMSProducer consumer;@RequestMapping("ConsumerTest")public String ConsumerTest(HttpServletRequest request, ModelMap modelMap) {Map<String, Object> map = new HashMap<String, Object>();map.put("name", "小明");consumer.send(map);return "msg";}}




0 0
原创粉丝点击