RabbitMQ-Ruby-Bunny-将消息(重新)发布到下一个队列的最佳实践

RabbitMQ-Ruby-Bunny-将消息(重新)发布到下一个队列的最佳实践,ruby,rabbitmq,bunny,Ruby,Rabbitmq,Bunny,我们正在检查RabbitMQ以了解一些工作流用例 到目前为止,我们用ruby创建了一个测试环境,该环境适合我们的需要,并且似乎运行良好 作为兔子新手,我的问题是关于最佳/良好实践 让我们定义3个队列(仅作为示例) Q_决定 对 Q_左 每个制作人都将在Q_决策中发布消息 队列上有一个工作进程正在运行,它检查正文的某些内容。在作出决定的情况下,必须将消息/任务移至Q_左侧或Q_右侧 我们正在存储特定于消息的信息properties.headers,因此我们将重复它们以及正文 到目前为止没有问题,现

我们正在检查RabbitMQ以了解一些工作流用例

到目前为止,我们用ruby创建了一个测试环境,该环境适合我们的需要,并且似乎运行良好

作为兔子新手,我的问题是关于最佳/良好实践

让我们定义3个队列(仅作为示例)

  • Q_决定
  • Q_左
  • 每个制作人都将在Q_决策中发布消息

    队列上有一个工作进程正在运行,它检查正文的某些内容。在作出决定的情况下,必须将消息/任务移至Q_左侧或Q_右侧

    我们正在存储特定于消息的信息properties.headers,因此我们将重复它们以及正文

    到目前为止没有问题,现在的问题是关于再版:

    q_decision.subscribe(:block=>true)do | delivery_信息、属性、正文|
    # ... 这里有更多代码
    如果(左)
    发布(body,:headers=>properties.headers,:persistent=>true)
    结束
    结束
    
    如果我们像上面那样重新发布,我们会从上一条消息中丢失什么吗

    delivery\u info
    properties
    中定义/存储了许多属性


    我们必须重新发布它们吗?还是只发布自己创建的标题和正文?

    消息正文和消息标题是两件不同的事情。我假设bunny或任何客户端库都将使用您传递的主体创建一条新消息。这意味着您还需要重新设置要传递到下一个队列的标题。

    为什么不将所需的所有信息都放在正文中?使用标题将自动对所有值进行编码。如果你想用身体做这件事,你必须自己解决。但无论在哪里存储“私有”值,我的问题是:通常应该重新发布什么类型的属性。这在很大程度上取决于您的需要。当您将消息从队列中拉出时,您实际需要什么信息?对于我们的解决方案,我们只需要查找
    正文
    和添加到标题中的两个数组,即
    properties.headers['data']
    properties.headers['ctx']
    。我的问题是要知道,什么样的属性必须重新发布,比如:id(当然不是)或timestamp,或者这些属性是否总是通过重新发布操作生成新的?在我的用法中,当消息从一个队列移动到另一个队列时(不要忘记确认原始消息),我重新发布了正文,并让bunny对其他内容执行它想要的任何操作。问题是:我们是否需要重新发布一些其他定义的属性,如这里所述:Extract:RabbitMQ消息具有各种元数据属性,可以在消息发布时设置这些属性。有些是众所周知的,并在AMQP中提到,另一些是特定于特定应用的。众所周知的属性是::persistent:mandable:timestamp:expiration:type:reply\u to:content\u type:content\u encoding:correlation\u id:priority:user\u id:app\u id所有其他属性都可以添加到headers表中:除非使用相同的消息实例,我想你需要转载所有的东西。消息实例是指表示消息的Ruby对象。