![](/img/trans.png)
[英]Are multiple consumers in BlockingCollection handled concurrently?
[英]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-1
, thread-2
等處理消息。
有人經歷過類似的事情嗎?
看,你說:
在int-xml:validating-filter和int-xml:unmarshalling-transformer之后,我定義了一個隊列通道actionInstructionTransformed。
現在讓我們轉到QueueChannel
和PollingConsumer
定義 !
另一方面,連接到實現org.springframework.messaging.PollableChannel接口(例如QueueChannel)的通道的通道適配器將生成PollingConsumer的實例。
並注意@Poller
( PollerMetadata
)具有taskExecutor
選項。
默認情況下, TaskScedhuler
問QueueChannel
數據定期根據trigger
的配置。 如果那是PeriodicTrigger
,其默認選項為fixedRate = false
,則下一次輪詢確實發生在上一個輪詢之后。 這就是為什么您只看到一個線程的原因。
因此,嘗試配置taskExecutor
,來自該隊列的消息將並行進行。
DefaultMessageListenerContainer
上的concurrency
無效。 因為最后您將所有這些消息都QueueChannel
。 在這里,基於@Poller
配置的新線程模型開始工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.