按计数从 JMS MQ 或内存消息存储中读取消息

read messages from JMS MQ or In-Memory Message store by count

我想根据计数从 JMS MQ 或内存消息存储中读取消息。
就像我想在消息计数为 10 时开始阅读消息,直到我希望消息处理器空闲。
我希望使用 WSO2 ESB 完成此操作。
有人可以帮我吗?

谢谢。

我不熟悉 wso2,但从 MQ 的角度来看,执行此操作的方法是在队列中有 10 条消息时触发应用程序 运行。有针对此的触发设置,特别是 TRIGTYPE(DEPTH).

为了扩展 Morag 的回答,我怀疑 WS02 是否有内置触发器可以在读取消息之前监控队列的深度。我怀疑它只是监听队列并在消息到达时对其进行处理。我也怀疑能不能用MQ的触发机制直接按深度方便的执行流。因此,虽然触发是一个很好的答案,但您需要一些胶水代码才能使其发挥作用。

方便的是,有一个教程提供了执行此操作所需的几乎所有信息。详情请参阅 Mission:Messaging: Easing administration and debugging with circular queues。那篇文章包含使 Q 程序与 MQ 触发一起工作所必需的脚本。您只需要进行一些更改:

  1. 与其向 Q 发送删除消息的命令,不如发送移动它们的命令。

  2. 抛弃计算要删除多少消息的数学方法,要么以 10 条为一组移动它们,要么移动所有消息直到队列耗尽。在后一种情况下,一定要告诉 Q 等待任何散兵游勇。

这是它完成后的样子:传入消息到达某个队列 other 而不是 WS02 输入队列。该队列是根据深度触发的,以便 Q 程序 (SupportPac MA01) 将消息复制到真正的 WS02 输入队列。复制消息后,胶水代码会重置触发器。这一直持续到队列中的消息少于 10 条,此时循环空闲。

我通过将消息推送到 db 并根据我的这个答案中所需的计数得到它,看看我的