2012-06-01 42 views
0

我正在使用DefaultMessageListenerContainer來使用來自主題(Broker是ActiveMQ)的郵件。因爲消費者在運行時創建我做的是以下幾點:使用DefaultMessageListenerContainer從主題丟失郵件

1)我有一個Conainer模板春季

<bean id="topiccontainertemplate" class="org.springframework.jms.listener.DefaultMessageListenerContainer" scope="prototype" destroy-method="stop"> 
    <property name="connectionFactory" ref="connectionfactory" /> 
    <property name="pubSubDomain" value="true" /> 
    <property name="cacheLevelName" value="CACHE_CONSUMER" /> 
    <property name="destinationName" value="default" /> 
</bean> 

2)當需要新的消費我從一個新的配置應用程序conext並重新配置destinationName。

DefaultMessageListenerContainer container = context.getBean("topiccontainertemplate", DefaultMessageListenerContainer.class); 
container.setDestinationName(localEntity.getId().getDestination()); 
container.setMessageListener(getListener()); 
container.start(); 

不幸的是,容器遺漏了關於該主題的一些消息。 有人知道我在做什麼錯嗎?

+0

「某些消息」是什麼意思?它們是初始信息還是間歇性的? – sully6768

+0

@ sully6768它不是最初的信息。中間的一些消息似乎消失了(我仍在調查)。 – Laures

回答

1

經過一些更多的測試,我們發現消費者創造過程中的競爭條件。信息沒有丟失,它們沒有在我們的代碼中正確分發。

2

您的訂閱看起來不耐用。如果是這樣,當您的子版離線/啓動時,信息將被保存。您的訂閱者將從完全啓動的位置獲取消息 - 之前發送的消息將會丟失。