1

我们有场景需要异步处理来自外部系统的大量消息,目前的设计是每 5 分钟唤醒一次工作以从外部系统提取 msg,然后持久化原始 msg,然后将 msg id 发送到 ExecutorChannel,所以消费者(可能很多)可以从渠道消费。

我们面临的问题是如何处理队列中的消息时系统崩溃,不知何故,每次作业唤醒时,我们都需要查看我们的数据库以找出是否有任何原始消息不在队列中。

最简单的方法是查询当前队列大小并找出队列中的原始味精是否多于味精。所以我的问题是: ExecutorChannel 是否有任何 API 可以找出队列的大小?或任何其他建议?

谢谢杰森

4

1 回答 1

1

Spring Integration 本身并不在 ExecutorChannel 中维护队列;消息由底层 Executor 执行。

如果您使用的是专用于通道的 Spring ThreadPoolTask​​Executor,您可以深入到通道的底层 ThreadPoolTask​​Executor 的 ThreadPoolExecutor,并获取其 BlockingQueue (getQueue()) 的句柄并获取它的计数。

但是,您还必须添加活动任务计数。

总计数将是近似值,但因为 ThreadPoolExecutor 没有原子方法来获取排队和活动任务的计数。

于 2012-05-18T15:08:43.050 回答