MassTransit 确保在发布消息之前创建队列
MassTransit Ensure Queues Created before Publishing Messages
我们有多个服务并使用 publish/subscribe 模式从服务 A 发送事件以供其他服务(B 和 C)处理。目标是让多个队列通过匹配绑定键/主题来接收来自一个生产者的消息。
如果服务 B 和 C 先启动,则此方法工作正常。在这种情况下,Subscribe 方法会创建 Exchange 和 Queues 以在发布时接收消息。但是,如果服务 A 先启动,则发布的消息将丢失,因为未创建接收队列。
寻找最佳实践方法以确保在发布之前创建队列。生产者不了解消费者,对于给定的消息类型,随着时间的推移可能会有更多的消费者,所以我们不能让生产者代码负责创建队列。
我们当前的实现是在背板上使用 RabbitMQ,但我们希望随着时间的推移迁移到 SQS 和 Azure 服务总线,因此我们需要它与 Message Broker 无关
答案很简单,在启动发布商之前启动消费者服务。
或者,您可以使用带有自定义构建或命令行的 DeployTopologyOnly
标志来部署 queue/exchanges/bindings 而无需实际启动消费者,但它仍然是消费者服务它的配置。
我们有多个服务并使用 publish/subscribe 模式从服务 A 发送事件以供其他服务(B 和 C)处理。目标是让多个队列通过匹配绑定键/主题来接收来自一个生产者的消息。
如果服务 B 和 C 先启动,则此方法工作正常。在这种情况下,Subscribe 方法会创建 Exchange 和 Queues 以在发布时接收消息。但是,如果服务 A 先启动,则发布的消息将丢失,因为未创建接收队列。
寻找最佳实践方法以确保在发布之前创建队列。生产者不了解消费者,对于给定的消息类型,随着时间的推移可能会有更多的消费者,所以我们不能让生产者代码负责创建队列。
我们当前的实现是在背板上使用 RabbitMQ,但我们希望随着时间的推移迁移到 SQS 和 Azure 服务总线,因此我们需要它与 Message Broker 无关
答案很简单,在启动发布商之前启动消费者服务。
或者,您可以使用带有自定义构建或命令行的 DeployTopologyOnly
标志来部署 queue/exchanges/bindings 而无需实际启动消费者,但它仍然是消费者服务它的配置。