我正在尝试建立一个消息传递系统,并在多个应用程序上运行。我有一个运行RabbitMQ的实例,这似乎很好。我可以将多个订阅者/发布服务器连接到RabbitMQ实例,它们看起来很好。然后,我可以从一个发布服务器发布一条消息,但只有一个订阅服务器正在接收该消息。
我相信这与我排队的方式有关。我看过关于兔子,https://www.rabbitmq.com/tutorials/tutorial-three-dotnet.html的教程,但我不知道这是否能转化为Masstransit库。
为了我的生命,我很难弄清楚我做错了什么。
NuGets:
有人能帮忙吗?
// 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);
});
}));
});发布于 2019-03-12 19:23:02
您遇到的问题是因为您在所有消费者上使用相同的队列名。如果您想要向所有使用者广播,您应该使所有队列名都是唯一的。在您的代码示例中,应该为每个使用者设置唯一的settings.RabbitMq.ConnectionName变量。
检查下面的图片,想象一下Subscription B是您设置的队列settings.RabbitMq.ConnectionName。您将得到的是图片的左边部分,只有Subscriber B1接收到(实际上是循环平衡,但这将偏离主题)。如果要广播,可以创建单独的订阅(或示例中的settings.RabbitMq.ConnectionName )。

https://stackoverflow.com/questions/55113401
复制相似问题