Masstransit+RabbitMQ。在两种不同的消息类型之间共享一个队列
我有一个发布者,它将消息发布到rabbitmq://localhost/test123 队列一条消息具有TestMessage类型,另一条消息具有TestMessage2类型 发布服务器配置:Masstransit+RabbitMQ。在两种不同的消息类型之间共享一个队列,rabbitmq,message-queue,messaging,masstransit,Rabbitmq,Message Queue,Messaging,Masstransit,我有一个发布者,它将消息发布到rabbitmq://localhost/test123 队列一条消息具有TestMessage类型,另一条消息具有TestMessage2类型 发布服务器配置: sbc.UseRabbitMq(r => r.ConfigureHost(new MessageUrn("rabbitmq://localhost/test123"), c => { })); sbc.UseLog4Net(); sbc.UseJsonSerializer(); sbc
sbc.UseRabbitMq(r => r.ConfigureHost(new MessageUrn("rabbitmq://localhost/test123"), c => { }));
sbc.UseLog4Net();
sbc.UseJsonSerializer();
sbc.EnableMessageTracing();
sbc.ReceiveFrom(new MessageUrn("rabbitmq://localhost/test123"));
我有两个seprate消费者,每个消息类型2消费者,消费者1:
//config stuff
sbc.ReceiveFrom("rabbitmq://localhost/test678?prefetch=20");
sbc.Subscribe(subs => { subs.Handler<TestMessage>(msg => { Logger.Info(msg.Text); }); });
消费者2:
//config stuff
sbc.ReceiveFrom("rabbitmq://localhost/test678");
sbc.Subscribe(
subs =>
{
subs.Handler<TestMessage2>(
msg => { Logger.Info(String.Format("rcv:txt= {0}, number= {1}", msg.Text, msg.Number)); });
});
所以,当我停止发布者并运行其中一个使用者时,他会使用他类型的所有消息,并将其他消息移动到错误队列。Exchange for test678对这两种类型都有绑定
在将其他消息移动到错误队列时,两个不同的使用者会尝试读取他们的消息,这是正常行为吗?为什么我不能在不同兴趣类型的不同消费者之间共享一个队列
我相信这不是masstransit的问题,而是rabbitmq的设计考虑或限制
提前感谢。如果有多个service bus实例从同一队列接收,则需要确保在该service bus实例上注册的使用者相同。否则,服务使用的消息将被移动到消息类型的错误队列中,而该消息类型在该服务实例上没有使用者。非常感谢,Chris。还有一个问题:这是因为队列rabbitmq(在本例中)将消息推送到使用者吗?所以,若消费者不知道如何处理此消息类型,他会将其移动到错误队列。我相信,如果有来自消费者端的轮询,这种情况是可以避免的……没有轮询这样的事情,而且这也不重要,因为RMQ不区分消息类型。