<?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>