簡體   English   中英

Spring集成隊列,以任何方式獲取當前隊列大小?

[英]Spring integration queue, any way to get current queue size?

我們的場景是需要異步處理來自外部系統的大量消息,當前的設計是每5分鍾喚醒一次作業,以從外部系統中提取味精,然后保留原始味精,然后將味精ID發送給ExecutorChannel,因此消費者(可能很多)可以從渠道消費。

我們面臨的問題是,當msgs在隊列中時如何處理系統崩潰,以某種方式每次作業喚醒時,我們都需要查看數據庫,以查明隊列中是否還沒有原始msgs。

最簡單的方法是查詢當前隊列大小,並找出隊列中的原始msg是否比msg多。 所以我的問題是:ExecutorChannel是否有任何API可以找出隊列的大小? 或其他建議?

傑森(Thx Jason)

Spring Integration本身並不在ExecutorChannel中維護隊列; 消息由基礎執行程序執行。

如果您使用的是專用於通道的Spring ThreadPoolTask​​Executor,則可以向下鑽取到通道的基礎ThreadPoolTask​​Executor的ThreadPoolExecutor,並獲取其BlockingQueue的句柄(getQueue())並進行計數。

但是,您還必須添加活動任務數。

盡管由於ThreadPoolExecutor沒有原子方法來獲取排隊和活動任務的計數,所以總數將是近似的。

您可以通過id獲取隊列,並在獲取queueSize()之后

@Qualifier(value="myChannel")
@Autowired(required=false)
QueueChannel  queue;
 ....
 queue.getQueueSize()

此處有關此內容的更多詳細信息: http : //mariemjabloun.blogspot.com/2014/04/spring-integration-channel-queue-get.html

暫無
暫無

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

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