【问题标题】:Messaging pattern question消息模式问题
【发布时间】:2010-04-07 13:00:23
【问题描述】:

进程 A 正在计算对象 a1、a2、a3 等的值,并将结果发送到中间件队列 (RabbitMQ)。消费者读取队列并进一步处理这些结果。 进程 A 必须定期发送这些值的快照,以便消费者可以进行一些其他计算。这些对象的值可能会独立改变。队列可能看起来像这样 a1, a1, a2, a1, a2, a2, a3... 消费者处理队列中的每个项目。快照必须包含所有对象,消费者将一次性处理所有对象的此消息。

所以要求是有一个这样的队列:a1, a1, a3, a2, a2, [snapshot, a1, a2, a3], a3, a1 ... 问题是这些项目是不同类型的:一种用于对象,如 a1、a2,另一种用于快照。这意味着它们应该在不同的队列中处理,但在这种情况下存在竞争条件:消费者可能会在处理快照之前处理对象。

有什么模式可以解决这个(很常见的)问题吗?我们正在使用 RabbitMQ 进行消息队列。

【问题讨论】:

  • 也许你可以将它们包装在一个公共类的对象中——例如,QueueItem——这解决了你的“不同类型”问题。消费者一旦将 QueueItem 从队列中取出,就可以简单地检查它包含的对象类型。但这是一个通用的解决方案,由于我对 RabbitMQ 一无所知,我将把它作为评论留下。

标签: design-patterns messaging rabbitmq tibco


【解决方案1】:

对每个消费者使用一个队列和一个内容类型前缀来指示正在传递的消息的类型。认为AMQP消息中可能有一个'type'属性,但我从来没有使用过,所以不知道它是否适用于这个问题。

【讨论】:

    猜你喜欢
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 2020-06-28
    • 2017-05-06
    相关资源
    最近更新 更多