Warm tip: This article is reproduced from serverfault.com, please click

asp.net-MassTransit:为多个API实例配置队列

(asp.net - MassTransit: Configure queue for multiple API instances)

发布于 2020-12-02 15:21:21

我正在使用.NET 5 Web APIMassTransitlocalhost上的RabbitMQ以及实时环境中的AWS结合使用,从而将自己介绍给事件驱动的架构

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

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

  • 如何配置#API-2,以便所有实例都收到相同的消息

生产者配置(#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();
Questioner
GomalId
Viewed
11
Alexey Zimarev 2020-12-02 23:52:47

你需要使用不同的端点名称。每个终结点都有自己的队列和绑定,因此,如果使用相同的终结点名称,则会得到一个队列,并且所有实例都开始争夺消息。

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