ActiveMQ整合Spring

ゞ 浴缸里的玫瑰 2022-06-10 13:36 310阅读 0赞
  1. 我是在本地windows64MQ, 运行win64下的activemq.bat启动消息服务器。

消息监听方

工程结构如下,创建了两个点对点消息监听对象,两个主题消息监听对象。

这里写图片描述

consumer.xml配置监听方

  1. <!-- 消息队列链接工厂 -->
  2. <amp:connectionFactory id="amqConnectionFactory" brokerURL="tcp://localhost:61616" userName="admin" password="admin" />
  3. <!-- spring管理jms链接工厂的工厂 -->
  4. <bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
  5. <property name="targetConnectionFactory" ref="amqConnectionFactory" />
  6. <property name="sessionCacheSize" value="10"/>
  7. </bean>
  8. <jms:listener-container destination-type="queue" container-type="default" connection-factory="connectionFactory">
  9. <jms:listener destination="myQueue" ref="queueReceiver1"/>
  10. <jms:listener destination="myQueue" ref="queueReceiver2"/>
  11. </jms:listener-container>
  12. <jms:listener-container destination-type="topic" container-type="default" connection-factory="connectionFactory">
  13. <jms:listener destination="myTopic" ref="topicReceiver1"/>
  14. <jms:listener destination="myTopic" ref="topicReceiver2"/>
  15. </jms:listener-container>

启动监听器

  1. public class AppRun {
  2. public static void main(String[] args) {
  3. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
  4. context.start();
  5. System.out.println("-----消息监听方启动了------");
  6. }
  7. }

这时,ActiveMQ 管理界面可以看到两个queue consumer, 两个topic consumer
这里写图片描述
这里写图片描述

消息发送方

用了一个简单的springMVC来 产生消息

这里写图片描述

controller

  1. @Controller
  2. @RequestMapping(value = "/sendmessage")
  3. public class ProducerController {
  4. @Autowired
  5. private IProducer producer;
  6. @RequestMapping(value = "/queue")
  7. public void sendQueue() {
  8. producer.sendQueue("myQueue", "队列消息");
  9. System.out.println("发了队列消息");
  10. }
  11. @RequestMapping(value = "/topic")
  12. public void sendTopic() {
  13. producer.sendTopic("myTopic", "主题消息");
  14. System.out.println("发了订阅消息");
  15. }
  16. }

Service

  1. @Service
  2. public class Producer implements IProducer {
  3. @Autowired
  4. private JmsTemplate jmsQueueTemplate;
  5. @Autowired
  6. private JmsTemplate jmsTopicTemplate;
  7. public void sendQueue(String queueName, final String message) {
  8. jmsQueueTemplate.send(queueName, session -> session.createTextMessage(message) );
  9. }
  10. public void sendTopic(String topicName, final String message) {
  11. jmsTopicTemplate.send(topicName, session -> session.createTextMessage(message) );
  12. }
  13. }

jmsQueueTemplate, jmsTopicTemplate的配置如下

  1. <!-- 消息队列链接工厂 -->
  2. <amp:connectionFactory id="amqConnectionFactory" brokerURL="tcp://localhost:61616" userName="admin" password="admin" />
  3. <!-- spring管理jms链接工厂的工厂 -->
  4. <bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
  5. <property name="targetConnectionFactory" ref="amqConnectionFactory" />
  6. <property name="sessionCacheSize" value="10"/>
  7. </bean>
  8. <!-- 点对点消息生产者 -->
  9. <bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
  10. <constructor-arg ref="connectionFactory"/>
  11. <property name="pubSubDomain" value="false"/>
  12. </bean>
  13. <!-- 发布订阅消息生产者 -->
  14. <bean id="jmsTopicTemplate" class="org.springframework.jms.core.JmsTemplate">
  15. <constructor-arg ref="connectionFactory"/>
  16. <property name="pubSubDomain" value="true"/>
  17. </bean>

其中连接工厂的配置和监听方的一致。
部署到tomcat运行以后,调用接口产生消息,监听方即可接收到消息
这里写图片描述

发送四次队列消息,发现队列消息两个监听器交替接收消息
这里写图片描述

主题消息订阅方都可以收到
这里写图片描述

源码链接 http://download.csdn.net/download/u013041642/9942264

发表评论

表情:
评论列表 (有 0 条评论,310人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Spring 整合 ActiveMQ

    Spring 是J2EE 最重要的框架,ActiveMQ 是Jms的框架,用于两个程序、系统中的异步通信,两者的用途都挺广泛。上一篇博文介绍的是发布-订阅形式,今次以点-点形式