MassTransit - 发布到所有消费者实例

MassTransit - publish to all consumer instances

我正在为每个消费者实例寻找一种方法来接收通过 MassTransit 发布到 RabbitMQ 的消息。场景是,我们有多个微服务需要在收到通知时使缓存失效。在这种情况下,Pub-Sub 将不起作用,因为每个服务实例将有 5 个与其相同代码相同类型的消费者,因此在传统的 PubSub 中只有一个消费者会收到消息。

消息观察可能是一个选项,但这意味着消息永远不会被消耗并永远在总线上徘徊。

任何人都可以建议在 MassTransit 上下文中使用的模式吗?

提前致谢。

您应该在每个服务中创建一个管理端点,它甚至可以是一个临时队列(只需请求一个没有队列名称的接收端点,一个将被动态生成)。然后,将您的队列失效消费者放在该端点上。每个服务实例都会收到一个唯一的消息实例(当调用 Publish 时),一旦服务退出,这些队列和绑定将自动删除。

这正是总线端点的工作方式,但在您的情况下,您正在创建一个可以具有消费者消息类型绑定的接收端点,以便接收发布的消息,每个服务一个副本。

cfg.ReceiveEndpoint(cfg => { ... });

注意队列名称没有指定,会自动生成唯一的。