【问题标题】:Pattern to check if queued message can still be processed检查排队消息是否仍可处理的模式
【发布时间】:2011-06-17 02:55:11
【问题描述】:

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

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

是否有用于实现此类“过时检查”的软件模式?有人提到了一些关于死蜗牛图案的事情,但我在 Google 上找不到任何参考资料...

【问题讨论】:

  • 如何为每条消息附加一个生存时间 (ttl),并丢弃所有 ttl 已过期的消息?
  • 假设我们通过消息代理发送 2,000 条 SMS 消息。经纪人 1 去 1,000,经纪人 2 去 1,000。现在经纪人 2 出现故障,两个小时后又回来了。现在在代理 2 上恢复的 1,000 条消息中有 3 条针对刚刚选择不接收 SMS 的个人。这只是一种情况,另一种可能是客户取消操作。设置 TTL 是不够的,但感觉就像存在某种模式。
  • 也许这就是死蜗牛:zguide.zeromq.org/…

标签: design-patterns message-queue


【解决方案1】:

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

不过,简而言之,您需要定义 staleness 并在您从队列中读取消息时检查它。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 2014-11-01
    • 2012-09-14
    • 2013-10-21
    • 2023-04-08
    • 2013-08-05
    • 2020-01-28
    相关资源
    最近更新 更多