SpringMVC+JMS(ActiveMQ)的小Demo
来源:互联网 发布:2部电梯 调度算法 编辑:程序博客网 时间:2024/05/21 22:24
前段时间,听说公司要用JMS,就想着要未雨绸缪,就自己先了解了一番。经过一番努力,总算有点小成绩了,把环境搭了起来,结合ActiveMQ,将SpringMVC+JMS跑了起来,现分享出来,供初学者参考,如有错漏之处,请批评指正。
环境:SpringMVC+JMS+ActiveMQ
所需jar包:SpringMVC所需jar包、ActiveMQ 5.4.3、activemq-all-5.3.0.jar
步骤:1、下载ActiveMQ ,并运行
1、搭建SpringMVC工程
2、整合JMS
废话不多说,先贴代码。
首先贴控制层的:
package com.springmvc.controller;import javax.annotation.Resource;import org.apache.activemq.command.ActiveMQQueue;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import com.springmvc.service.JMSProducer;@Controller@RequestMapping("/jms-controller")public class JMSController {@Resourceprivate JMSProducer jMSProducer;@Resourceprivate ActiveMQQueue queueDestination;@Resourceprivate ActiveMQQueue sessionAwareQueue;@Resourceprivate ActiveMQQueue adapterQueue;@RequestMapping(value="")public String index(){return "JMS-producer";}@RequestMapping(value="/send")public String producerSendMessage(String message){jMSProducer.sendMessage(queueDestination, message);return "JMS-producer";}@RequestMapping(value="/sendsessionawaremessagelistenermessage")public String sessionAwareMessageListenerMessage(String sessionAwareMessageListenerMessage){jMSProducer.sendMessage(sessionAwareQueue, sessionAwareMessageListenerMessage);return "JMS-producer";}@RequestMapping(value="/sendmessagelisteneradapter")public String sendMessageListeneradApter(String messageListenerAdapter){jMSProducer.sendMessage(adapterQueue, messageListenerAdapter);return "JMS-producer";}}
再贴服务层JMSProducerImpl :
package com.springmvc.service.impl;import javax.annotation.Resource;import javax.jms.Destination;import org.apache.activemq.command.ActiveMQQueue;import org.springframework.jms.core.JmsTemplate;import org.springframework.stereotype.Service;import com.springmvc.jms.JMSMessageCreator;import com.springmvc.service.JMSProducer;@Servicepublic class JMSProducerImpl implements JMSProducer {@Resourceprivate JmsTemplate jmsTemplate;@Resourceprivate ActiveMQQueue defaultResponseQueue;@Overridepublic void sendMessage(Destination destination,String message) {// TODO Auto-generated method stubSystem.out.println("**********producer发送一个消息。。。。***********");JMSMessageCreator myMessageCreator = new JMSMessageCreator(message,defaultResponseQueue);jmsTemplate.send(destination, myMessageCreator);}}
再贴JMSMessageCreator :
package com.springmvc.jms;import javax.jms.Destination;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.Session;import javax.jms.TextMessage;import org.springframework.jms.core.MessageCreator;public class JMSMessageCreator implements MessageCreator{private Object messageInformation;private Destination responseDestination;public JMSMessageCreator(){}public JMSMessageCreator(String textMessage){this.messageInformation = textMessage;}public JMSMessageCreator(String textMessage, Destination responseDestination){this.messageInformation = textMessage;this.responseDestination = responseDestination;}@Overridepublic Message createMessage(Session session) throws JMSException {// TODO Auto-generated method stubMessage message = session.createTextMessage((String)messageInformation);((TextMessage)message).setJMSReplyTo(responseDestination); return message;}public Object getMessageInformation() {return messageInformation;}public void setMessageInformation(Object messageInformation) {this.messageInformation = messageInformation;}public Destination getResponseDestination() {return responseDestination;}public void setResponseDestination(Destination responseDestination) {this.responseDestination = responseDestination;}}
<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd"><!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供--> <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://localhost:61616"/> </bean> <!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory --> <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory"><!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory --> <property name="targetConnectionFactory" ref="targetConnectionFactory"/> </bean><!-- Spring提供的JMS工具类,它可以进行消息发送、接收等 --> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 --> <property name="connectionFactory" ref="connectionFactory"/> </bean><!--这个是队列目的地,点对点的,基于--> <bean id="queueDestination" name="queueDestination" class="org.apache.activemq.command.ActiveMQQueue"> <constructor-arg value="queue" /> <!-- <value>queue</value> </constructor-arg> --></bean> <!--这个是主题目的地,一对多的--> <bean id="topicDestination" class="org.apache.activemq.command.ActiveMQTopic"> <constructor-arg value="topic"/> </bean> <!-- 消息监听器 ,类方法继承最原始的MessageListener,只能接收消息--> <bean id="consumerMessageListener" class="com.springmvc.jms.JMSConsumerMessageListener"/> <!-- 消息监听容器 --> <bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="connectionFactory" /> <property name="destination" ref="queueDestination" /> <property name="messageListener" ref="consumerMessageListener" /> </bean> <!--这个是sessionAwareQueue目的地--> <bean id="sessionAwareQueue" class="org.apache.activemq.command.ActiveMQQueue"> <constructor-arg value="sessionAwareQueue"> <!-- <value>sessionAwareQueue</value> --> </constructor-arg> </bean><!-- 可以获取session的MessageListener --> <bean id="consumerSessionAwareMessageListener" class="com.springmvc.jms.JMSConsumerSessionAwareMessageListener"> <!-- <property name="destination" ref="queueDestination"/> --> </bean> <bean id="sessionAwareListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="connectionFactory" /> <property name="destination" ref="sessionAwareQueue" /> <property name="messageListener" ref="consumerSessionAwareMessageListener" /> </bean> <!-- 以下配置消息监听适配器, 这种监听方式可以将消息传递给普通的java类使用,并且可以自动返回消息 --> <!-- 消息监听适配器 --> <bean id="messageListenerAdapter" class="org.springframework.jms.listener.adapter.MessageListenerAdapter"> <!-- <constructor-arg> <bean class="com.tiantian.springintejms.listener.ConsumerListener"/> </constructor-arg> --> <property name="delegate"> <bean class="com.springmvc.jms.JMSConsumerMessageListenerAdapter"/> </property> <property name="defaultListenerMethod" value="receiveMessage"/> <property name="defaultResponseDestination" ref="defaultResponseQueue"/> </bean><!--这个adapterQueue是队列目的地,点对点的--> <bean id="adapterQueue" name="adapterQueue" class="org.apache.activemq.command.ActiveMQQueue"> <constructor-arg value="adapterQueue" /> <!-- <value>queue</value> </constructor-arg> --></bean> <!-- 消息监听适配器对应的监听容器 --> <bean id="messageListenerAdapterContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="connectionFactory"/> <property name="destination" ref="adapterQueue"/> <property name="messageListener" ref="messageListenerAdapter"/><!-- 使用MessageListenerAdapter来作为消息监听器 --> </bean> <!-- defaultResponseQueue默认的消息回复队列 --> <bean id="defaultResponseQueue" class="org.apache.activemq.command.ActiveMQQueue"> <constructor-arg> <value>defaultResponseQueue</value> </constructor-arg> </bean><!-- defaultResponseQueue对应的监听器 --> <bean id="defaultResponseQueueListener" class="com.springmvc.jms.JMSDefaultResponseQueueListener"/> <!-- defaultResponseQueue对应的监听容器 --> <bean id="defaultResponseQueueMessageListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="connectionFactory"/> <property name="destination" ref="defaultResponseQueue"/> <property name="messageListener" ref="defaultResponseQueueListener"/> </bean> </beans>
再贴 JMSConsumerMessageListener :
package com.springmvc.jms;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.MessageListener;import javax.jms.TextMessage;public class JMSConsumerMessageListener implements MessageListener {@Overridepublic void onMessage(Message message) {// TODO Auto-generated method stubSystem.out.println("----收到一个消息------------");try {System.out.println("消息是===>"+((TextMessage)message).getText());} catch (JMSException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
再贴 JMSConsumerMessageListenerAdapter :
package com.springmvc.jms;public class JMSConsumerMessageListenerAdapter {public void receiveMessage(String message){System.out.println("消息配置器收到消息,消息是:"+message);}}
package com.springmvc.jms;import javax.jms.Destination;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.MessageProducer;import javax.jms.Session;import javax.jms.TextMessage;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.jms.listener.SessionAwareMessageListener;public class JMSConsumerSessionAwareMessageListener implements SessionAwareMessageListener<TextMessage> {@Overridepublic void onMessage(TextMessage textMessage, Session session) throws JMSException {// TODO Auto-generated method stubSystem.out.println("SessionAware接收到一个消息……");System.out.println("消息是:"+textMessage.getText()+"\n");System.out.println("**********接收之后,发送一个收到消息*************");ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext-jms.xml");//加载applicationContext内容Destination queueDestination = (Destination) act.getBean("queueDestination");MessageProducer producer = session.createProducer(queueDestination); Message textMessage2 = session.createTextMessage("Producer,你好!我已收到你发送之消息,接下来我将……"); producer.send(textMessage2); }}
</pre><pre name="code" class="java">
源码Demo下载地址:http://download.csdn.net/detail/rainorfire/8224595
ActiveMQ 5.4.3 + activemq-all-5.3.0.jar下载地址:http://download.csdn.net/detail/rainorfire/8224669
有兴趣的朋友可以下载下来试试看!
0 0
- SpringMVC+JMS(ActiveMQ)的小Demo
- JMS + ActiveMQ 简单的demo
- JMS Activemq实战例子demo
- springmvc小demo的构成
- Spring+JMS+使用JMS+ActiveMQ中间件+实现简单聊天功能的小例子
- 【JMS】JMS之ActiveMQ的使用
- 小实验-ActiveMQ实现jms监听队列
- SpringBoot 整合ActiveMQ 小Demo
- 应用基本springmvc框架的小demo
- ActiveMQ和JMS的使用
- JMS与ActiveMQ的基本概念
- ActiveMQ 实现点对点的消息模型小Demo
- SpringMVC登陆小demo
- JMS ActiveMQ
- JMS ActiveMQ
- JMS ActiveMQ
- JMS activeMQ
- JMS------ActiveMQ
- linux的文件结构详解
- IOS对iPhone6和plus的适配
- 有线路由器接无线路由器设置方法
- 黑马程序员 Java基础之System,Runtime,Date,Calendar,Math.Random对象
- Tomcat - 内存溢出处理
- SpringMVC+JMS(ActiveMQ)的小Demo
- JavaScript学习第三课--输出
- Uva 111-History Grading(DP/LCS)
- 【LeetCode】Longest Palindromic Substring
- Gvim Windows 编辑器
- UITextField与键盘的控制
- 汇编(三)中间人(汇编指令)
- Caused by: java.lang.ClassNotFoundException: javax.persistence.Entity
- 如果有那么一刹那