如何将公共交通消费者连接到由不同应用程序创建的交换
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。
我正在使用 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。