MassTransit和广播

问题描述 投票:2回答:1

我试图在多个应用程序之间启动并运行消息传递系统。我有一个运行RabbitMQ的实例,看起来没问题。我可以将多个订阅者/发布者连接到RabbitMQ实例,看起来没问题。然后,我可以从一个发布者发布消息,但只有一个订阅者正在收到消息。

我认为这与我建立队列的方式有关。我看过关于Rabbit,https://www.rabbitmq.com/tutorials/tutorial-three-dotnet.html的教程,但我不知道这会转换成Masstransit库。

对于我的生活,我无法弄清楚我做错了什么。

掘金:

  • MassTransit.Extensions.DependencyInjection 5.3.2
  • MassTransit.RabbitMQ 5.3.2

有人可以帮忙吗?

        // Register MassTransit
        services.AddMassTransit(mtCfg =>
        {
            mtCfg.AddConsumer<DomainMessageConsumer>();

            mtCfg.AddBus(provider => Bus.Factory.CreateUsingRabbitMq(rbCfg =>
            {
                var host = rbCfg.Host(settings.RabbitMq.Host, settings.RabbitMq.VirtualHost, h =>
                {
                    h.Username(settings.RabbitMq.Username);
                    h.Password(settings.RabbitMq.Password);
                });

                rbCfg.ReceiveEndpoint(host, settings.RabbitMq.ConnectionName, ep =>
                {
                    ep.PrefetchCount = 16;
                    ep.UseMessageRetry(x => x.Interval(2, 100));

                    ep.ConfigureConsumer<DomainMessageConsumer>(provider);
                });
            }));
        });
c# rabbitmq masstransit
1个回答
2
投票

您遇到的问题是因为您在所有使用者身上使用相同的queuename。如果您想要向所有消费者广播,您应该使所有的队列名称都是唯一的。在您的代码示例中,您应该为每个使用者设置唯一的settings.RabbitMq.ConnectionName变量。

检查下面的图片,想象Subscription B是你设置的队列settings.RabbitMq.ConnectionName。你会得到的是图片中的左侧部分,只有Subscriber B1收到(实际上它是循环平衡,但这是偏离主题的)。如果您想要广播,可以创建单独的订阅(或者在您的示例中使用settings.RabbitMq.ConnectionName)。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.