ActiveMQ中topic类型消息的持久化

1、queue默认是持久化的;topic,因为要发送给多个人,默认是非持久化的,就是说topic里的消息放在内存里,只发给在线的订阅者,如果想要收到topic里所有的消息怎么办呢?这时,又有一个新的概念了,持久订阅。

(1)、消息的生产者增加<property name="deliveryMode" value="2" />的配置。

<!-- 定义JmsTemplate的Topic类型 -->
	<bean id="jmsTopicTemplate" class="org.springframework.jms.core.JmsTemplate">
		<!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->
		<constructor-arg ref="cachingConnectionFactory" />
		<!-- pub/sub模型(发布/订阅) -->
		<property name="pubSubDomain" value="true" />
		<!-- 进行持久化 -->
                <property name="deliveryMode" value="2" />  
	</bean>

 (2)、消息的消费者增加

<!-- 1、单独的接收topic消息的cachingConnectionFactory,不要和发送的或接收queue消息的一样 -->
	<bean id="cachingConnectionFactory1"
		class="org.springframework.jms.connection.CachingConnectionFactory">
		<property name="targetConnectionFactory" ref="connectionFactory"></property>
		<property name="sessionCacheSize" value="100" />
		<!-- 2、接收者ID -->  
        <property name="clientId" value="${activemq.queue.name}" />
	</bean>
	
	<bean id="topicCustomerA" class="org.apache.activemq.command.ActiveMQTopic">  
        <!-- 订阅消息的名字 -->  
        <constructor-arg index="0" value="${activemq.gwcs.topic.name}"/>  
    </bean>  
	<bean id="receiveTopicGwcsListener"
		class="com.zzstxx.unify.message.listener.ReceiveTopicGwcsListener" />
    <bean id="listenerContainerA" class="org.springframework.jms.listener.DefaultMessageListenerContainer">  
        <property name="connectionFactory" ref="cachingConnectionFactory1" />  
        <property name="destination" ref="topicCustomerA" />  
        <property name="messageListener" ref="receiveTopicGwcsListener" />  
        <!-- 3、持久化消息 -->  
        <property name="subscriptionDurable" value="true"/>  
        <!-- 4、接收者ID -->  
        <property name="clientId" value="${activemq.queue.name}" />  
        <property name="durableSubscriptionName" value="${activemq.queue.name}"/>  
    </bean>

 

猜你喜欢

转载自zxf-noimp.iteye.com/blog/2376353