我已经了解了发送(〜1个使用者称为)和发布(所有使用者称为)之间的区别。在我的环境中,我希望介于两者之间。
例如:
已准备好包裹,并准备好发货。可以发送事件“ ParcelPrepared”。在此事件上,应触发2个操作:“生成发票”和“发送电子邮件”。但是每个动作只能调用一次。
实际上,我只能通过发送来做到这一点,并且两个操作都托管在同一个.net进程中(但我不希望如此)。如果每个动作都托管在不同的进程中,则只会触发其中一个。
如果我使用发布,则将调用所有流程,并且可以发送 N 电子邮件或生成 N 发票,如果流程中断,我将丢失消息。< / p>
我错过了什么吗?
编辑:
这是我想要实现的目标。
许多“准备包裹”进程可以发出一条消息(我不知道的命令/事件)“准备包裹”。
在发出消息时希望通知不同的使用者(“发票”和“电子邮件发件人”)。每个消费者都被多次实例化。应该仅通知每个消费者一个,以避免处理每个消费者的并发。
每个消费者都可以接收到由于某种原因而丢失的消息,即使只有一部分消费者处于关闭状态(“发票”和“电子邮件发件人”都处于关闭状态)。
答案 0 :(得分:0)
您的ParcelPrepared
是一个活动,应该发布。然后,您可以在不同的过程中有两个使用者,它们将发送命令BuildInvoice
和SendEmail
。这些命令的使用者将完成工作。
您永远不会丢失消息,因为它们被放置在端点队列中,并且会一直留在那里直到被消耗。