我正在寻找一种方法让每个消费者实例接收通过MassTransit发布到RabbitMQ的消息。方案是,我们有多个微服务需要在通知时使缓存无效。 Pub-Sub在这个实例中不会工作,因为每个服务实例将有5个相同类型的消费者,因此只有一个消费者会在传统的PubSub中收到消息。
消息观察可能是一个选项,但这意味着消息永远不会被消费并永远在公交车上闲逛。
有人可以建议在MassTransit的上下文中使用模式吗?
提前致谢。
答案 0 :(得分:5)
您应该在每个服务中创建一个管理端点,它甚至可以是一个临时队列(只需要一个没有队列名称的接收端点,一个将动态生成)。然后,将队列失效消费者放在该端点上。每个服务实例将接收消息的唯一实例(调用Publish时),并且一旦服务退出,将自动删除这些队列和绑定。
这正是总线端点的工作方式,但在您的情况下,您正在创建一个可以具有消费者消息类型绑定的接收端点,以便接收已发布的消息,每个服务一个副本。
cfg.ReceiveEndpoint(host, cfg => { ... });
请注意,未指定队列名称,并且将自动生成唯一的队列名称。