Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 模式,以检查是否仍可以处理排队的消息_Design Patterns_Message Queue - Fatal编程技术网

Design patterns 模式,以检查是否仍可以处理排队的消息

Design patterns 模式,以检查是否仍可以处理排队的消息,design-patterns,message-queue,Design Patterns,Message Queue,我们正在构建一个包含多个组件的应用程序,这些组件可能会通过JMS队列相互发送消息。有时,这些队列可能会出现重大延迟(由于维护等原因) 预计某些消息可能会过时,即它们存在的环境突然发生变化,应在下一次可用的机会中丢弃它们 是否有一种软件模式来实现这种“过时检查”?有人提到了一个死蜗牛模式,但我在谷歌上找不到任何参考…这里没有真正的模式,因为这个概念可能太具体了 不过,简而言之,您需要定义过时性,并在任何时候从队列中读取消息时进行检查 根据@Space_C0wb0y对OP的评论,这可能需要一个简单的

我们正在构建一个包含多个组件的应用程序,这些组件可能会通过JMS队列相互发送消息。有时,这些队列可能会出现重大延迟(由于维护等原因)

预计某些消息可能会过时,即它们存在的环境突然发生变化,应在下一次可用的机会中丢弃它们


是否有一种软件模式来实现这种“过时检查”?有人提到了一个死蜗牛模式,但我在谷歌上找不到任何参考…

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

不过,简而言之,您需要定义过时性,并在任何时候从队列中读取消息时进行检查

根据@Space_C0wb0y对OP的评论,这可能需要一个简单的生存时间或其他过期计时器,也可能需要在行中的适当位置进行其他更复杂的检查

但是,实际上,它不能作为将消息放回队列的链中的一个单独步骤来实现,因为在您的场景中,延迟可能会在检查完成后发生


因此,重申一下,任何这种性质的检查都需要在实际处理步骤中的最后一个可能的时刻,在从队列中读取之后进行。

在每条消息上附加一个生存时间(ttl),并丢弃所有ttl已过期的消息,怎么样?假设我们通过消息代理发送2000条SMS消息。1000由经纪人1支付,1000由经纪人2支付。现在经纪人2下线,两小时后回来。现在在Broker2上恢复的1000条短信中,有三条是针对刚刚选择不接收短信的个人的。这只是一种情况,另一种可能是客户取消操作。设置TTL是不合适的,但它感觉像某种模式存在。也许这就是死蜗牛: