MassTransit - 发送和发布:介于两者之间

问题描述 投票:0回答:1

我已经理解了发送(~1个消费者呼叫)和发布(所有消费者呼叫)之间的区别。在我的环境中,我想要介于两者之间。

例如:

准备好包裹并随时发货。事件可以发送“ParcelPrepared”。在此事件中,应触发2个操作:“构建发票”和“发送电子邮件”。但每个动作只应调用一次。

实际上我只是设法使用Send执行此操作,并且两个操作都托管在相同的.net进程中(但我不希望这样)。如果每个操作都托管在不同的进程上,则只会触发其中一个。

如果我使用Publish,将调用所有进程,我可以发送N封电子邮件或构建N个发票,如果进程关闭,我将丢失消息。

我错过了什么吗?

编辑:

这是我想要实现的模式。

Objective

许多过程“包裹准备”可以发出消息(我不知道的命令/事件)“包裹准备”。

不同的消费者(“发票”和“电子邮件发件人”)希望在发出消息时得到通知。每个消费者都多次实例化。应该通知每个消费者中的一个,以避免处理每个消费者的并发性。

即使只有部分消费者关闭(“开票”和“电子邮件发件人”关闭,两者都关闭),每个消费者都应该能够收到错过的消息。

multi-tenant masstransit
1个回答
0
投票

你的ParcelPrepared是一个事件,它应该发布。然后,您可以在这些不同的进程中拥有两个使用者,即发送命令BuildInvoiceSendEmail。这些命令的消费者将完成这项工作。

您永远不会丢失消息,因为它们被放置到端点队列并将一直保留到消耗状态。

© www.soinside.com 2019 - 2024. All rights reserved.