2011-05-27 34 views
0

我们正在构建一个包含多个组件的应用程序,这些组件可能会通过JMS队列向对方发送消息。在这些队列中可能会有很多时间(由于维护等原因)出现严重延迟。用于检查排队消息是否仍然可以处理的模式

预计一些消息可能变得陈旧 - 即它们存在的环境突然改变,它们应该在下一个可用机会时被丢弃。

是否有软件模式来实现这种“过时检查”?有人提到了一些关于死亡蜗牛模式的问题,但我无法在Google上找到任何参考...

+0

如何在每封邮件中附加生存时间(ttl),并丢弃所有ttl已过期的邮件? – 2011-05-27 08:58:49

+0

想象一下,我们通过消息代理发送了2000条SMS消息。 1,000经纪人1,1,000由经纪人2支付。现在经纪人2下降并在两个小时后回来。经纪人2现在复活的1,000条消息中有三条是针对刚刚选择不接收短信的人。这只是一种情况,另一种可能是客户取消了操作。设置一个TTL是不够的,但它感觉就像一个模式存在的东西。 – jmkgreen 2011-05-27 09:02:15

+0

也许这是死亡蜗牛:http://zguide.zeromq.org/page:all#Slow-Subscriber-Detection-Suicidal-Snail-Pattern – sdg 2011-06-16 18:50:23

回答

0

这里没有真正的模式,因为这个概念可能太具体。

但是,您需要定义陈旧性,并在您从队列中读取消息时检查它。

根据@ Space_C0wb0y对OP的评论,这可以使用一个简单的生存时间或其他到期计时器,或者可以在该行的适当位置进行一些其他更复杂的检查。

然而,它不能实际上作为链中的一个单独步骤将消息放回队列中,因为在您的情况下,延迟可能在检查完成后发生。

所以要重申,对于这种性质的任何检查都需要在实际的处理步骤中,在从队列中读取之后的最后时刻进行。

相关问题