公共交通+ RabbitMQ。在两种不同的消息类型之间共享一个队列

Masstransit+ RabbitMQ. Share one queue among two different message types

我有一个发布者,它将消息发布到 rabbitmq://localhost/test123 队列。一条消息具有 TestMessage 类型,另一条消息具有 TestMessage2 类型。

发布商配置:

 sbc.UseRabbitMq(r => r.ConfigureHost(new MessageUrn("rabbitmq://localhost/test123"), c => { }));
 sbc.UseLog4Net();
 sbc.UseJsonSerializer();
 sbc.EnableMessageTracing();
 sbc.ReceiveFrom(new MessageUrn("rabbitmq://localhost/test123"));

每种消息类型我有两个单独的消费者(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)); });
                });

因此,当我停止发布者和 运行 其中一位消费者时,他会消费他类型的所有消息并将其他消息移至错误队列。 test678 的交换对这两种类型都有绑定。

2 个不同的消费者在将其他消息移至错误队列时尝试读取他们的消息是否正常?为什么我不能在不同兴趣类型的不同消费者之间共享一个队列?

(我认为这不是公共交通问题,而是 rabbitmq 设计考虑或限制)

提前致谢。

如果您有多个服务总线实例从同一个队列接收数据,您需要确保在该服务总线实例上注册的消费者是相同的。否则,服务使用的消息将移动到该服务实例上没有消费者的消息类型的 _error 队列。