Spring整合ActiveMq消息队列

匿名 (未验证) 提交于 2019-12-02 21:35:04

ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。

特性列表:
⒈ 多种语言和协议编写客户端。语言: Java,C,C++,C#,Ruby,Perl,Python,PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
⒉ 完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)
⒊ 对spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性
⒋ 通过了常见J2EE服务器(如 Geronimo,JBoss 4,GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上
⒌ 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
⒍ 支持通过JDBC和journal提供高速的消息持久化
⒎ 从设计上保证了高性能的集群,客户端-服务器,点对点
⒏ 支持Ajax
⒐ 支持与Axis的整合
⒑ 可以很容易的调用内嵌JMS provider,进行测试

ActiveMq安装很简单,ActiveMQ默认启动到8161端口,启动完了后在浏览器地址栏输入:http://localhost:8161/admin 要求输入用户名密码,默认用户名密码为admin、admin,后便可看到ActiveMQ控制台界面了。

@Service public class ProducerService {     @Resource(name="jmsTemplate")     private JmsTemplate jmsTemplate;      public void sendMessage(Destination destination, final String msg){         System.out.println(Thread.currentThread().getName()+" 向队列"+destination.toString()+"发送消息---------------------->"+msg);         jmsTemplate.send(destination, new MessageCreator() {             public Message createMessage(Session session) throws JMSException {                 return session.createTextMessage(msg);             }         });     }      public void sendMessage(final String msg){         String destination = jmsTemplate.getDefaultDestinationName();         System.out.println(Thread.currentThread().getName()+" 向队列"+destination+"发送消息---------------------->"+msg);         jmsTemplate.send(new MessageCreator() {             public Message createMessage(Session session) throws JMSException {                 return session.createTextMessage(msg);             }         });     } } 
@Service public class ConsumerService {      @Resource(name="jmsTemplate")     private JmsTemplate jmsTemplate;      public TextMessage receive(Destination destination){         TextMessage textMessage = (TextMessage) jmsTemplate.receive(destination);         try{             System.out.println("从队列" + destination.toString() + "收到了消息:\t" + textMessage.getText());         } catch (JMSException e) {             e.printStackTrace();         }         return textMessage;     } } 
public class QueueMessageListener implements MessageListener{     @Override     public void onMessage(Message message) {         TextMessage textMessage = (TextMessage) message;         try {              String text = textMessage.getText();              System.out.println("监听到消息内容是:" + text);         } catch (JMSException e) {             e.printStackTrace();         }     } }
 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"        xmlns:amq="http://activemq.apache.org/schema/core"        xmlns:jms="http://www.springframework.org/schema/jms"        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-4.1.xsd         http://www.springframework.org/schema/context         http://www.springframework.org/schema/context/spring-context-4.1.xsd         http://www.springframework.org/schema/mvc         http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd         http://www.springframework.org/schema/jms         http://www.springframework.org/schema/jms/spring-jms-4.1.xsd         http://activemq.apache.org/schema/core         http://activemq.apache.org/schema/core/activemq-core-5.12.1.xsd" >      <context:component-scan base-package="com.Jayce" />     <mvc:annotation-driven />      <amq:connectionFactory id="amqConnectionFactory"                            brokerURL="tcp://127.0.0.1:61616"                            userName="admin"                            password="admin" />      <!-- 配置JMS连接工长 -->     <bean id="connectionFactory"           class="org.springframework.jms.connection.CachingConnectionFactory">         <constructor-arg ref="amqConnectionFactory" />         <property name="sessionCacheSize" value="100" />     </bean>      <!-- 定义消息队列(Queue) -->     <bean id="demoQueueDestination" class="org.apache.activemq.command.ActiveMQQueue">         <!-- 设置消息队列的名字 -->         <constructor-arg>             <value>Jaycekon</value>         </constructor-arg>     </bean>      <!-- 配置JMS模板(Queue),Spring提供的JMS工具类,它发送、接收消息。 -->     <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">         <property name="connectionFactory" ref="connectionFactory" />         <property name="defaultDestination" ref="demoQueueDestination" />         <property name="receiveTimeout" value="10000" />         <!-- true是topic,false是queue,默认是false,此处显示写出false -->         <property name="pubSubDomain" value="true" />     </bean>       <!-- 配置消息队列监听者(Queue) -->     <bean id="queueMessageListener" class="com.Jayce.Filter.QueueMessageListener" />      <!-- 显示注入消息监听容器(Queue),配置连接工厂,监听的目标是demoQueueDestination,监听器是上面定义的监听器 -->     <bean id="queueListenerContainer"           class="org.springframework.jms.listener.DefaultMessageListenerContainer">         <property name="connectionFactory" ref="connectionFactory" />         <property name="destination" ref="demoQueueDestination" />         <property name="messageListener" ref="queueMessageListener" />     </bean>  </beans>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!