NATS 发布者可以将一条消息发送到多个队列吗?

Gus*_*uss 3 messaging message-queue publish-subscribe nats.io

我正在构建一个系统,其中两个不同的实体需要处理来自同一源的消息(以不同的方式 - 例如,一个实体将记录所有消息,而另一个实体可能想要聚合数据)。

理想情况下,每个实体在性能和弹性方面都是完全可扩展的,因此我们有多个发布者、多个日志订阅者和多个聚合订阅者,但每个发布者生成的每条消息仍然由一个日志订阅者和一个聚合订阅者处理。

使用 AMQP,我们可以通过发布到扇出交换来实现此目的,该交换将消息分发到两个队列,其中每个队列有许多订阅者。据我了解,只需让所有订阅者根据其角色使用两个不同的“队列组名称”来监听同一“主题”,就可以在 NATS 中实现相同的行为。

在这种情况下,发送给主题的消息将被传递给来自每个队列组的一个订阅者,即每条消息将被精确地传递n次,n是不同队列组的数量而不是订阅者的数量。它是否正确?

I. *_*vic 6

事实上,您可以使用队列订阅者(例如在 Go 中,它将是这样的 API func (nc *Conn) QueueSubscribe(subj, queue string, cb MsgHandler) (*Subscription, error):.

queue是组名称。例如,它可能在您的示例中logaggregation。您可以在每个组上创建任意数量的队列订阅者,并且每个组中只有 1 名成员将收到给定的消息。

例如,假设您在主题上发布消息,并且队列名称foo上有 10 个队列订阅者,队列名称上有 10 个队列订阅者。该消息将传递给 2 个订阅者,1 个用于 group ,1 个用于 group 。foologfooaggregationlogaggregation

希望这可以帮助。