2012-05-18 42 views
1

我們有很多來自外部系統的消息都需要異步處理的場景,目前的設計是每5分鐘喚醒一次工作,從外部系統中提取msg,然後保留原始msg,然後將msg id發送到ExecutorChannel ,所以消費者(可能很多)可以從渠道消費。Spring集成隊列,獲取當前隊列大小的任何方式?

我們面臨的問題是如何處理系統崩潰而隊列中的消息,不知何故,每次工作喚醒時,我們都需要查看我們的數據庫以確定是否有任何原始消息不在隊列中。

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

THX 傑森

回答

1

Spring集成本身不保持ExecutorChannel內的隊列;這些消息由底層的執行程序執行。

如果您使用的是專用的通道春天ThreadPoolTask​​Executor類,可以深入到渠道的底層ThreadPoolTask​​Executor類的ThreadPoolExecutor的,並得到一個處理它的BlockingQueue(getQueue()),並得到它的計數。

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

總數是近似值,但因爲ThreadPoolExecutor沒有原子方法來獲得排隊和活動任務的計數。