用于扇出消息传递的RabbitMQ工作队列

用于扇出消息传递的RabbitMQ工作队列,rabbitmq,exchange-server,amqp,Rabbitmq,Exchange Server,Amqp,我正在尝试扩展RabbitMQ消息传递系统。当前的系统非常简单-生产者将消息发送到扇出交换机,消息由多个使用者处理-经典的扇出路由 我有多个不同类型的消费者(例如:一个打印到屏幕,一个记录到文件,一个保存到数据库,…)。 我的挑战——我不确定扩大消费者规模的最佳方式是什么。如果我添加来自同一类型的其他使用者-我将在数据库中获得双日志或双条目。。。(假设两个DB消费者从同一扇出交换中消费) 我想我可以创建一个发布到工作队列的使用者,但我想知道rabbitmq中是否有更好的“内置”解决方案 提前感谢

我正在尝试扩展RabbitMQ消息传递系统。当前的系统非常简单-生产者将消息发送到扇出交换机,消息由多个使用者处理-经典的扇出路由

我有多个不同类型的消费者(例如:一个打印到屏幕,一个记录到文件,一个保存到数据库,…)。 我的挑战——我不确定扩大消费者规模的最佳方式是什么。如果我添加来自同一类型的其他使用者-我将在数据库中获得双日志或双条目。。。(假设两个DB消费者从同一扇出交换中消费)

我想我可以创建一个发布到工作队列的使用者,但我想知道rabbitmq中是否有更好的“内置”解决方案

提前感谢,,
zf

如果您需要扩展消费者以更快地消费来自扇出交换机的所有消息,则需要竞争性消费;因此,您需要更多的使用者连接到绑定到扇出交换的同一队列。
这样,每个消费者都将独立于其他消费者消费一批消息。批处理中的消息数由预回迁计数属性()定义。

这样,在您的情况下,您应该能够扩展消费者,避免在数据库中出现双日志和双条目。

这是显而易见的,所以我想我不清楚……我道歉。问题是如何进行扩展,同时确保每种类型的消费者只有一个进行处理。如果我有两种类型的consuner,type1和type2,我希望每种类型都能处理每条消息,但每种类型只能处理一次。我可以创建一个扇出交换,它将发送到2个工作队列……还有其他选项吗?我不知道我是否正确理解您的请求,但如果您希望与每个使用者进行扇出交换,并将其自己的队列绑定到扇出交换,则无法确保仅处理来自一个使用者的单个消息。我看到的唯一允许扩展使用者并确保其中只有一个使用者使用消息的方法是将单个队列上的所有使用者绑定到exchange(在这种情况下,它可以是直接的,不需要扇出)。但是,也许我不完全明白,如果我的回答对你没有多大帮助,很抱歉:-“我可以创建一个扇出交换机,将发送到2个工作队列……还有其他的选择吗?”加布里埃,我在寻找另一种方法,因为我认为有更好的方法。这听起来像是一个非常标准的场景(特别是对于今天的微服务),所以我希望有一个“内置模式”。无论如何,谢谢大家!!我想实现我的目标的唯一方法确实是扇出(这样许多处理程序/使用者都会接受消息),但随后会路由到一个工作队列(这样每种类型只有一个处理程序会处理传入的消息)。我几乎面临着同样的挑战(确实是微服务体系结构)我想我可以解释为什么提出的解决方案不是optimql。