首页 > 解决方案 > MassTransit:为多个 API 实例配置队列

问题描述

我正在使用MassTransit和本地主机上的RabbitMQ 和实时环境上的AWS使用.NET 5 Web API将自己介绍给事件驱动的架构。

我有一个 API ( #API-1 ),它产生事件,例如EntityCreatedEntityUpdatedEntityDeleted等。

然后我有另一个 API ( #API-2 ) 存储实体的内存副本。此#API-2必须订阅这些事件才能更新其本地缓存。#API-2将有多个正在运行的实例,比如说 3。

生产者配置(#API-1):

services.AddMassTransit(x =>
{
    x.UsingRabbitMq();
});
services.AddMassTransitHostedService();

消费者配置(#API-2):

services.AddMassTransit(x =>
{
    x.AddConsumer<EntityCreatedConsumer>();
    x.AddConsumer<EntityUpdatedConsumer>();
    x.AddConsumer<EntityDeletedConsumer>();

    x.UsingRabbitMq((context, cfg) =>
    {
        cfg.ConfigureEndpoints(context);
    });
});
services.AddMassTransitHostedService();

标签: asp.netrabbitmqqueuepublish-subscribemasstransit

解决方案


您需要使用不同的端点名称。每个端点都有自己的队列和绑定,因此如果您使用相同的端点名称,您将获得一个队列并且所有实例开始竞争消息。

这是一个常见的错误,这就是为什么它甚至在文档中提到


推荐阅读