gpt4 book ai didi

c# - 公共(public)交通和广播

转载 作者:行者123 更新时间:2023-11-30 21:29:44 25 4
gpt4 key购买 nike

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

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

在我的生活中,我无法弄清楚自己做错了什么。

NuGets:

  • 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);
});
}));
});

最佳答案

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

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

enter image description here

关于c# - 公共(public)交通和广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55113401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com