ActiveMQ整合Spring

来源:互联网 发布:科学网 博弈 复杂网络 编辑:程序博客网 时间:2024/06/05 11:48
我是在本地windows的64位MQ, 运行win64下的activemq.bat启动消息服务器。

消息监听方

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

这里写图片描述

consumer.xml配置监听方

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

启动监听器

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

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

消息发送方

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

这里写图片描述

controller

@Controller@RequestMapping(value = "/sendmessage")public class ProducerController {    @Autowired    private IProducer producer;    @RequestMapping(value = "/queue")    public void sendQueue() {        producer.sendQueue("myQueue", "队列消息");        System.out.println("发了队列消息");    }    @RequestMapping(value = "/topic")    public void sendTopic() {        producer.sendTopic("myTopic", "主题消息");        System.out.println("发了订阅消息");    }}

Service

@Servicepublic class Producer implements IProducer {    @Autowired    private JmsTemplate jmsQueueTemplate;    @Autowired    private JmsTemplate jmsTopicTemplate;    public void sendQueue(String queueName, final String message) {        jmsQueueTemplate.send(queueName, session -> session.createTextMessage(message) );    }    public void sendTopic(String topicName, final String message) {        jmsTopicTemplate.send(topicName, session -> session.createTextMessage(message) );    }}

jmsQueueTemplate, jmsTopicTemplate的配置如下

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

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

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

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

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

原创粉丝点击