ActiveMQ与Spring集成

Wesley13
• 阅读 397

参考资料

http://blog.csdn.net/jiuqiyuliang/article/details/48758203 

该博文中有一到四章节对ActiveMQj进行介绍使用适合学习。

参考博文中的源码下载地址http://download.csdn.net/detail/jiuqiyuliang/9141139

思考改进

基于配置实现

第一种配置

<!-- 定义Topic监听器  -->
<jms:listener-container client-id="111" destination-type="topic" container-type="default" connection-factory="connectionFactory" acknowledge="auto">
    <jms:listener subscription="11111" destination="test.topic" ref="topicReceiver"/>
</jms:listener-container>

第二种配置

<!-- 定义Topic监听器 -->
<bean id="receive" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="connectionFactory" ref="connectionFactory"></property>
    <property name="destinationName" value="test.topic"></property>
    <property name="messageListener" ref="topicReceiver"></property>
    <property name="sessionAcknowledgeMode" value="1"></property>
    <property name="subscriptionDurable" value="true"></property>
    <property name="pubSubDomain" value="true"></property>
    <property name="clientId" value="111"></property>
    <property name="durableSubscriptionName" value="111a"></property>
</bean>

实现监听类为topicReceiver

基于注解实现

<bean id="jmsListenerContainerFactory" class="org.springframework.jms.config.DefaultJmsListenerContainerFactory">
    <property name="connectionFactory" ref="connectionFactory"/>
</bean>

<jms:annotation-driven/>

@Component("springQueueReciverTest")
public class SpringQueueReciverTest extends MessageListenerAdapter {

    @JmsListener(destination = "test.queue", concurrency = "5-10")
    public void onMessagehehe(Message message, Session session) throws JMSException {
        try {
            System.out.println(message);
        } catch (MessageConversionException e) {
            e.printStackTrace();
        }
    }
}

如何持续化订阅模式消息

第一种配置里修改属性

destination-type="durableTopic"

第二种配置里修改属性

<property name="subscriptionDurable" value="true"></property>

完整ActiveMQ.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    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"
    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/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.10.0.xsd">

    <amq:connectionFactory id="amqConnectionFactory" clientID="111"
        brokerURL="tcp://localhost:61616" userName="admin" password="admin" />

    <bean id="connectionFactory"
        class="org.springframework.jms.connection.CachingConnectionFactory">
        <constructor-arg ref="amqConnectionFactory" />
        <property name="sessionCacheSize" value="100" />
    </bean>
    
    <!-- ====Producer side start====-->
    <!-- 定义JmsTemplate的Queue类型 -->
    <bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
        <constructor-arg ref="connectionFactory" />
        <!-- 非pub/sub模型(发布/订阅),即队列模式 -->
        <property name="pubSubDomain" value="false" />
        <!-- 持续化 -->
        <property name="deliveryPersistent" value="true" />
    </bean>
    
    <!-- 定义JmsTemplate的Topic类型 -->
    <bean id="jmsTopicTemplate" class="org.springframework.jms.core.JmsTemplate">
        <constructor-arg ref="connectionFactory" />
        <!-- pub/sub模型(发布/订阅) -->
        <property name="pubSubDomain" value="true" />
        <!-- 持续化 -->
        <property name="deliveryPersistent" value="true" />
    </bean>
    <!-- ====Producer side end====-->

    
    <!-- ====Consumer side start====-->
    <!-- 定义Queue监听器  -->
    <jms:listener-container destination-type="queue" container-type="default" connection-factory="connectionFactory" acknowledge="auto">
        <jms:listener destination="test.queue" ref="queueReceiver" concurrency="1-1" />
    </jms:listener-container>
    
    <!-- 定义Topic监听器  -->
    <jms:listener-container client-id="111" destination-type="durableTopic" container-type="default" connection-factory="connectionFactory" acknowledge="auto">
        <jms:listener subscription="111a" destination="test.topic" ref="topicReceiver"/>
    </jms:listener-container>
    
    <!-- 监听器配置方式二
    <bean id="receive" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="connectionFactory"></property>
        <property name="destinationName" value="test.topic"></property>
        <property name="messageListener" ref="topicReceiver"></property>
        <property name="sessionAcknowledgeMode" value="1"></property>
        <property name="subscriptionDurable" value="true"></property>
        <property name="pubSubDomain" value="true"></property>
        <property name="clientId" value="111"></property>
        <property name="durableSubscriptionName" value="111a"></property>
      </bean>
    -->
    <!-- ====Consumer side end==== -->
    
    <!-- 监听&注解支持 -->
    <!--  
    <bean id="jmsListenerContainerFactory" class="org.springframework.jms.config.DefaultJmsListenerContainerFactory">
        <property name="connectionFactory" ref="connectionFactory"/>
    </bean>
    -->
    <!-- 
    <jms:annotation-driven/>
    -->
</beans>
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
P2P技术揭秘.P2P网络技术原理与典型系统开发
Modular.Java(2009.06)\.Craig.Walls.文字版.pdf:http://www.t00y.com/file/59501950(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.t00y.com%2Ffile%2F59501950)\More.E
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这