<?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:jms="http://www.springframework.org/schema/jms" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-4.0.xsd"> <bean id="amqConnectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory"> <property name="clientID" value ="test.clientID"></property> <property name="brokerURL" value="tcp://127.0.0.1:61616"/> <property name="userName" value="admin"/> <property name="password" value="admin"/> </bean> <bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory"> <property name="targetConnectionFactory" ref="amqConnectionFactory"/> <property name="sessionCacheSize" value="100"/> </bean> <!-- Message producer --> <!-- Queue --> <bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate"> <constructor-arg ref="connectionFactory"/> <property name="pubSubDomain" value="false"/> </bean> <!-- Topic --> <bean id="jmsTopicTemplate" class="org.springframework.jms.core.JmsTemplate"> <constructor-arg ref="connectionFactory"/> <property name="pubSubDomain" value="true"/> </bean> <jms:listener-container destination-type="durableTopic" recovery-interval="60000" container-type="default" client-id="test.clientID" connection-factory="connectionFactory" container-class="com.test.TestContainer" acknowledge="auto"> <jms:listener subscription="test.Consumer" destination="test.topic.name" ref="testQueueConsumer"/> </jms:listener-container> </beans>
上述配置是 配置的 topic模式
如果要设置clientID, 持久化订阅,则需要注意如下几点:
1. connectFactory 中要添加
<property name="clientID" value ="test.clientID"></property>
2. listener-container 中
destination-type="durableTopic"
client-id="test.clientID"
recovery-interval 为间隔刷新监听的时间,单位是毫秒, 默认是5秒
container-type 是container的类型,值可以是
- default ( DefaultMessageListenerContainer )
- simple (SimpleMessageListenerContainer)
常用的是 default
如果想要自定义container,则
container-class=" " 值为container的全路径,包括包名
通常自定义的container 需要继承 DefaultMessageListenerContainer 或者 SimpleMessageListenerContainer, 同时 container-type也要和父类保持一致
若是使用jar内默认的 ,则可以不配置改属性
jms-listener 说明
subscription: 持久化订阅者名称, 设置这个属性,服务器每次重启后,都不会生成新的,一直只有这一个
destination: 监听的 topic 的值
ref : 实际的消费 类
jar包引用如下:
<dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-core</artifactId> <version>5.7.0</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-pool</artifactId> <version>5.13.0</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>${spring.version}</version> </dependency>