【发布时间】:2018-09-06 17:13:10
【问题描述】:
我已经了解发送(约 1 个消费者调用)和发布(所有消费者调用)之间的区别。在我的环境中,我想要介于两者之间的东西。
例如:
一个包裹已准备好并准备发货。可以发送事件“ParcelPrepared”。在此事件中,应触发 2 个操作:“构建发票”和“发送电子邮件”。但是每个动作只能调用一次。
实际上,我只能通过发送来做到这一点,并且这两个操作都托管在同一个 .net 进程中(但我不希望这样)。如果每个动作都托管在不同的进程上,则只会触发其中一个。
如果我使用 Publish,将调用所有流程,我可以发送 N 封电子邮件或创建 N 份发票,如果流程停止,我将丢失消息。
我错过了什么吗?
编辑:
这是我想要实现的架构。
许多“包裹准备”进程可以发出消息(我不知道的命令/事件)“包裹准备”。
不同的消费者(“发票”和“电子邮件发件人”)希望在消息发出时得到通知。每个消费者被实例化多次。应该只通知每个消费者中的一个,以避免在每个消费者上处理并发。
每个消费者如果由于某种原因宕机,应该能够接收丢失的消息,即使只有部分消费者宕机(“发票”向上和“电子邮件发件人”宕机,两者都关闭)。
【问题讨论】: