簡體   English   中英

Spring Integration多個使用者無法同時處理

[英]Spring Integration Multiple consumers not processing concurrently

我正在使用帶有ActiveMQ的Spring Integration。 我用maxConcurrentConsumers = 5定義了一個DefaultMessageListenerContainer。它在中引用。 在int-xml:validating-filter和int-xml:unmarshalling-transformer之后,我定義了一個隊列通道actionInstructionTransformed。 我為此隊列通道設置了一個輪詢器。 當我啟動應用程序時,在ActiveMQ控制台中,我可以看到在五個會話中創建了一個連接。

現在,我有一個@MessageEndpoint ,其方法帶有注釋

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

我在方法入口處有一條日志語句。 每個消息的處理時間很長(幾分鍾)。 在我的日志中,我可以看到thread-1開始處理,然后我只能看到thread-1輸出。 只有當thread-1完成處理1條消息時,我才能看到thread-2開始處理下一條消息, @MessageEndpoint 。類中沒有任何同步塊,其注釋為@MessageEndpoint 我沒有設法同時獲取thread-1thread-2等處理消息。

有人經歷過類似的事情嗎?

看,你說:

在int-xml:validating-filter和int-xml:unmarshalling-transformer之后,我定義了一個隊列通道actionInstructionTransformed。

現在讓我們轉到QueueChannelPollingConsumer 定義

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

並注意@PollerPollerMetadata )具有taskExecutor選項。

默認情況下, TaskScedhulerQueueChannel數據定期根據trigger的配置。 如果那是PeriodicTrigger ,其默認選項為fixedRate = false ,則下一次輪詢確實發生在上一個輪詢之后。 這就是為什么您只看到一個線程的原因。

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

DefaultMessageListenerContainer上的concurrency無效。 因為最后您將所有這些消息都QueueChannel 在這里,基於@Poller配置的新線程模型開始工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM