我试图在多个应用程序之间启动并运行消息传递系统。我有一个运行RabbitMQ的实例,看起来没问题。我可以将多个订阅者/发布者连接到RabbitMQ实例,看起来没问题。然后,我可以从一个发布者发布消息,但只有一个订阅者正在收到消息。
我认为这与我建立队列的方式有关。我看过关于Rabbit,https://www.rabbitmq.com/tutorials/tutorial-three-dotnet.html的教程,但我不知道这会转换成Masstransit库。
对于我的生活,我无法弄清楚我做错了什么。
掘金:
有人可以帮忙吗?
// 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);
});
}));
});
您遇到的问题是因为您在所有使用者身上使用相同的queuename。如果您想要向所有消费者广播,您应该使所有的队列名称都是唯一的。在您的代码示例中,您应该为每个使用者设置唯一的settings.RabbitMq.ConnectionName
变量。
检查下面的图片,想象Subscription B
是你设置的队列settings.RabbitMq.ConnectionName
。你会得到的是图片中的左侧部分,只有Subscriber B1
收到(实际上它是循环平衡,但这是偏离主题的)。如果您想要广播,可以创建单独的订阅(或者在您的示例中使用settings.RabbitMq.ConnectionName
)。