如何将公共交通消费者连接到由不同应用程序创建的交换

How to connect à mass transit consumer to an exchange created by a different application

我正在使用 Masstransit 和 RabbitMq 在两个 web 应用程序 .net 核心之间进行通信。 在发布者应用程序中,我将消息发布到交易所 'producer'.

rabbitConfigurator.Message<TMessage>(x => x.SetEntityName("producer"));

在同一个应用程序中,我有一个上述消息的消费者 A,并且工作正常(消费者有一个交换器和一个队列,如 rabbit/masstransit 所推荐的连接到生产者交换器)

rabbitConfigurator.ReceiveEndpoint("consumer-A", x =>
            {
                x.Consumer<TConsumer>(context);
                x.Bind("producer");
            });

在第二个应用程序中,我正在尝试设置连接到交换器的相同消息类型的另一个消费者 B 'producer'。

rabbitConfigurator.ReceiveEndpoint("consumer-B", x =>
                {
                    x.Consumer<TConsumer>(context);
                    x.Bind("producer");
                });

但是,发往第二个应用程序的消息正被发送到跳过的队列。据我所见,第二个消费者在 RabbitMq 中的配置是正确的。

我看不到我错过了什么。

编辑:在生产应用程序中,我也可以在第二个消费者中成功接收消息。但是在另一个 Web 应用程序中它不起作用 - 可能与存在差异 connection/channel ?

这一事实有关

发送到 producer 交换器的消息应采用 MassTransit 可以反序列化的格式。如果不是,则需要添加一个可以支持消息类型的消息反序列化器。如果是 application/json 那么您需要将 RawJsonMessageDeserializer 添加到接收端点。

如果消息格式正确,请验证您在接收端点上是否有可以使用该消息类型的使用者。消息类型必须完全匹配,包括命名空间,才能被使用。更多详细信息可用 in the documentation