不同项目的多个同名消费者订阅同一个队列

Multiple consumers with the same name in different projects subscribed to the same queue

我们有 UserCreated 事件从 UserManagement.Api 发布。我还有另外两个 Apis,Payments.Api 和 Notification.Api 应该对那个事件做出反应。

在两个 Apis 中,我都有 public class UserCreatedConsumer : IConsumer<UserCreated>(如此不同的命名空间),但只为两个消费者创建了一个队列(在 SQS 上)。

处理这种情况的最佳方法是什么?

每个单独的服务(不是同一服务的实例)都需要具有不同的接收端点队列名称,如文档中所述:

cfg.ReceiveEndpoint("queue-name-per-service-type", e =>
{
    // rest of the configuration
});

common mistakes文章中也提到了。

您没有分享您的配置,但如果您正在使用:

x.AddConsumer<UserCreatedConsumer>();

作为 MassTransit 配置的一部分,您可以specify an InstanceId为该消费者生成一个唯一的端点地址。

x.AddConsumer<UserCreatedConsumer>()
    .Endpoint(x => x.InstanceId = "unique-value");