【问题标题】:RabbitMQ - best practiceRabbitMQ - 最佳实践
【发布时间】:2016-07-13 11:57:29
【问题描述】:

我正在尝试同步我拥有的三个微服务。

为了做到这一点,我实现了 RabbitMQ。 似乎目前一切正常,但我不确定我是否遵循最佳实践并且找不到参考来查找它,也许有人可以帮助我?

我想要做的事情的简要说明: 我有一项服务应该更新另外两项, 每个服务都应该收到发送的消息。 我有两种类型的消息(保存和删除资源)。 * 如果出现故障,队列应该恢复并重新发送消息。

我目前在做什么: 我已经建立了一个交换,我的每个消费者都连接到两个不同的队列,一个用于每种类型的消息(保存/删除)。 我使用了直接交换以便稍后过滤消息,尽管目前我不需要过滤它们。

每个队列都被命名,交换和消息都是持久的,我正在确认我已经消费的消息。

问题 我应该为每种类型的事件设置不同的队列,还是应该在同一个队列上发送消息并过滤它们? 是不是上面介绍的使用 RabbitMQ 才是问题的正确解决方案。 最佳做法是什么?

【问题讨论】:

    标签: rabbitmq


    【解决方案1】:

    您的设置是正确的。

    在 rabbit 中设计队列时的一个常见规则是,一个队列用于一种类型(这里类型表示不同的处理逻辑)的消费者。所以,既然你有两种类型的消费者。它们对不同类型的事件(保存/删除)有不同的逻辑,每个队列都是完全正确的。

    如果你只想拥有一种消费者,既可以处理保存事件,也可以处理删除事件,那么使用一个队列也是可以的。

    但是两种类型的消费者和一种共享队列是行不通的。因为当多个消费者订阅一个队列时,事件会以循环方式发送给消费者,因此您的任何一个消费者都只能收到一半的事件。

    【讨论】:

    • 感谢您的回答!我遇到了一个新问题,如果我没有消费一条消息并且我没有确认它。该进程不会再次尝试使用该消息。它永远不会进入队列中的就绪状态,但它仍在队列中。关于如何解决它的任何建议?
    • 你应该尝试捕获你的消费逻辑,如果有任何异常,并且你确定下一次尝试可能会成功,你可以发送一个 nack 将消息返回到队列,查看这个链接:stackoverflow.com/questions/28794123/ack-or-nack-in-rabbitmq;如果您确定重试仍会失败(基于捕获的异常),您仍应发送 ack,并记录您的异常以供进一步分析。
    猜你喜欢
    • 2012-12-13
    • 2020-08-26
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多