创建不同的消息或在 Masstransit 中进行某种过滤
Create different messages or there is some sort of filtering in Masstransit
我们正在向分布式系统中的公共交通迁移。
我们的集成合作伙伴在我们的系统上创建订单,他们得到 Order_Id。
处理订单后,我们会发布一条消息 (OrderStatusChanged),其中包含 Order_Id、状态...等
然而,通过发布消息,我们所有的合作伙伴都会收到此消息,即使它只是针对其中一个。
我们唯一能想到的解决方案是为每个集成的应用程序创建不同的消息。但是集成的应用程序数量庞大,而且还在不断增长。
是否有过滤消息的方法或不同的架构来克服这一挑战?
我假设,您正在发布消息。发布-订阅模式是您观察到的行为 - 一条消息被传递给该消息类型的所有订阅者(MassTransit 使用基于类型的路由)。
您需要改为发送消息,因此您可以明确指定将接收消息的端点。它是这样工作的:
public async Task SendOrder(ISendEndpointProvider sendEndpointProvider)
{
var endpoint = await sendEndpointProvider.GetSendEndpoint(_serviceAddress);
await endpoint.Send(new SubmitOrder(...));
}
这是我们文档的 link,关于发布与发送消息的部分:https://masstransit-project.com/MassTransit/usage/producing-messages.html
我们正在向分布式系统中的公共交通迁移。
我们的集成合作伙伴在我们的系统上创建订单,他们得到 Order_Id。
处理订单后,我们会发布一条消息 (OrderStatusChanged),其中包含 Order_Id、状态...等
然而,通过发布消息,我们所有的合作伙伴都会收到此消息,即使它只是针对其中一个。
我们唯一能想到的解决方案是为每个集成的应用程序创建不同的消息。但是集成的应用程序数量庞大,而且还在不断增长。
是否有过滤消息的方法或不同的架构来克服这一挑战?
我假设,您正在发布消息。发布-订阅模式是您观察到的行为 - 一条消息被传递给该消息类型的所有订阅者(MassTransit 使用基于类型的路由)。
您需要改为发送消息,因此您可以明确指定将接收消息的端点。它是这样工作的:
public async Task SendOrder(ISendEndpointProvider sendEndpointProvider)
{
var endpoint = await sendEndpointProvider.GetSendEndpoint(_serviceAddress);
await endpoint.Send(new SubmitOrder(...));
}
这是我们文档的 link,关于发布与发送消息的部分:https://masstransit-project.com/MassTransit/usage/producing-messages.html