2016-07-11 38 views
2

我正在尝试同步我拥有的三个微服务。RabbitMQ - 最佳做法

为了做到这一点,我实现了RabbitMQ。 这似乎是目前的工作,但我不知道如果我遵循最佳实践,我无法找到一个参考来查找它,也许有人可以帮助我呢?

简要的什么,我试图做的: 我有一个服务谁应该更新了两个人, 的每一项服务应接收发送的消息。 我有两种类型的消息(保存和删除资源)。 *发生故障时,队列应恢复并重新发送消息。

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

每个队列都被命名,并且交换以及消息都是持久的,并且我正在消费我消费的消息。

问题 我应该设定不同的队列,每个类型的事件,或者我应该发在同一个队列中的消息,并将其筛选? 上述是否使用RabbitMQ是解决问题的正确方案。 最佳做法是什么?

回答

1

您的设置是正确的。

在兔子里设计队列时的一个常见规则是,一个类型的消费者队列(这里指的是不同的处理逻辑)。所以,因为你有两种类型的消费者。他们对不同类型的事件(保存/删除)有不同的逻辑,每个队列的一个队列是完全正确的。

如果您希望只有一种类型的使用者可以处理保存和删除事件,那么使用一个队列也是可以的。

但是两种类型的消费者和一个共享队列将不起作用。当多个消费者订阅一个队列时,由于事件以循环方式发送给消费者,因此您的任一消费者只能接收一半的事件。

+0

谢谢你的回答! 我遇到了一个新问题,如果我未能消费一条消息,而我也没有确认。该过程不会再尝试并消耗该消息。 它永远不会进入队列中的就绪状态,但它仍然在队列中。 有关如何解决它的任何建议? – straiker2

+0

你应该尝试捕捉你的消费逻辑,如果有任何异常,并且你肯定下次尝试可能成功,你可以发送一个nack来将消息返回给队列,查看这个链接:http://stackoverflow.com/questions/28794123/ACK-或-NACK合的RabbitMQ;如果您确定重试仍会失败(基于发现的异常),则仍应发送确认,并记录异常以进一步分析。 –