不同项目的多个同名消费者订阅同一个队列
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");
我们有 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");