ActiveMQ整合Spring

我是在本地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

@Service
public 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值