是否有消息队列实现允许通过在消息流中插入“消息障碍”将工作分解为“批处理”?让我澄清一下。在消息障碍之后,消息不应传递给队列的任何消费者,直到屏障之前的所有消息被消耗为止。有点像同步点。如果所有消费者在到达障碍时收到通知,我也会更喜欢。
那里有这样的东西吗?
答案 0 :(得分:1)
我不知道现有的,广泛可用的实现,但如果你允许我,我会提出一个非常简单的通用实现使用代理,其中:
感谢Miklos指出,在JMS下,框架不提供异步交付的确认(JMS中所谓的“确认”纯粹是消费者方面的概念,并且不能代理。)
因此,在JMS 下,现有的实现(适用于障碍)可能已经通过“确认队列”提供应用程序级别的确认(而不是原始队列 - 这将是“请求队列”。消费者必须通过向代理确认队列发送确认消息来确认请求的执行。在将确认消息转发给生产者之后,代理将使用确认消息来跟踪屏障何时被清除。
如果现有的实施(适用于障碍)不已经通过“确认队列”提供了应用程序级别的确认,那么您可以:
QueueBrowser
,提供:
答案 1 :(得分:0)
您可以使用“障碍消息”的主题和“选择接收器”使用的“批量项目”的队列来实现此目的。
将障碍消息发布到主题可确保所有消费者都收到他们自己的障碍消息副本。
每个消费者都需要两个订阅:
屏障消息需要包含必须应用于队列消费者选择标准的批处理密钥
例如batchId = n
或JMSMessageID< 100个
或JMSTimestamp< xxx
每当收到屏障消息时,
如果您要使用自定义批处理键作为选择条件,例如上面的'batchId',则假设所有消息生产者都能够设置该JMS属性,否则代理将必须使用消息集该属性并重新发布到选择性消费者正在监听的队列中。
有关选择性接收器的更多信息,请参阅以下链接: