2017-01-18 50 views
0

我正在使用Spring集成ActiveMQ。我用maxConcurrentConsumers = 5定義了一個DefaultMessageListenerContainer。它在a中被引用。在int-xml:validating-filter和int-xml:unmarshalling-transformer之後,我定義了一個隊列通道actionInstructionTransformed。我有這個隊列頻道的輪詢。當我啓動我的應用程序時,在ActiveMQ控制檯中,我可以看到連接已創建並在五個會話中。現在春季集成多個消費者不同時處理

,我有帶註釋

@ServiceActivator(inputChannel = "actionInstructionTransformed", poller = @Poller(value = "customPoller")). 

我有在方法入口日誌語句的方法@MessageEndpoint。處理每條消息很長(幾分鐘)。在我的日誌中,我可以看到thread-1開始處理,然後我只能看到thread-1輸出。只有當thread-1完成處理1條消息後,我才能看到thread-2開始處理下一條消息等。我的課程中沒有任何同步塊,註釋爲@MessageEndpoint。我沒有設法同時獲得thread-1thread-2等進程消息。

有人經歷過類似的事嗎?

回答

0

你看,你說:

一個int-XML後:驗證過濾器和一個int-XML:解組變壓器,我定義了一個隊列通道actionInstructionTransformed。

現在讓我們來看看QueueChannelPollingConsumerdefinitions

在另一方面,連接到實現org.springframework.messaging.PollableChannel接口(例如一個QueueChannel)的信道的信道適配器將產生PollingConsumer的一個實例。

,注重的是@PollerPollerMetadata)具有taskExecutor選項。

默認情況下,TaskScedhuler根據trigger配置週期性詢問QueueChannel的數據。如果這是PeriodicTrigger與默認選項如fixedRate = false,下一輪民意測驗真的發生在上一輪之後。這就是爲什麼你只看到一個線程。

因此,請嘗試配置taskExecutor,並且來自該隊列的消息將並行發送。

concurrencyDefaultMessageListenerContainer沒有影響。因爲最後你將所有這些消息放到QueueChannel。在這裏,一個新的線程模型開始基於@Poller配置工作。

+0

非常感謝您的幫助。我添加了task-executor =「customTaskExecutor」給我的int:poller定義和 我現在有5個線程併發處理。 –

相關問題