我刚刚下载了joliver eventstore,并希望为Windows Service Bus 1.0
的服务总线连接一个跨越多个Bounded Context流程的应用程序。
如果有界上下文已经脱机,而其他有界上下文中的事件已经创建(或者甚至可能是已部署的新上下文),我可以看到以下事件序列。
我的问题是:
答案 0 :(得分:2)
以上场景适用于任何事件采购库,所以我可以使用任何基础设施代码,还是我必须自己动手?
与事件相关的投影机制的概念当然很常见。不幸的是,根据您的堆栈,性能要求和规模以及许多其他因素,有许多方法可以处理这些方法。
因此,我不知道这种性质的商品化设施。
GetEventStore商店有一个集成的Projection工具,它看起来非常强大,需要在桌面上构建所有这些功能。在它存在之前,我曾经争辩过,人们甚至不应该考虑超越JOES的SRP。
除了提到Azure之外,你还没有多说过你的实际堆栈。
使用Windows Service Bus,如何将事件存储中的序列号与服务总线上的序列号结合?
您可以使用流ID +提交序列号MessageId
(并使用它来确保总线删除重复项)。您可能还会在消息元数据中包含属性。
检测和处理已经以安全方式接收的事件(防止消息处理程序失败)的最佳做法是什么?
如果您使用Azure并考虑使用ServiceBus,则可以使用主题确保至少一次传送(并且您将使用会话功能)。去看two hour deep dive ClemensV Subscribe video加上其他一些剧集,或者你会花相同的时间犯错误)
为了保持广播流量不受影响,如果ContextC请求从ContextA和ContextB重放,那么这些重播消息是否有任何方式只能发送到ContextC?或者我不应该担心这个?
亩。你开始询问这些东西是不是一个好主意,但现在似乎已经假设它是可行的。
首先,这个基础设施是重塑的巨大轮子。您是否考虑过根据BC设置主题并让任何需要倾听的人听?
这里的一个关键是你要记住这样一个事实,那就是因为你可以想到BC需要消耗彼此事件的情况,这个中央魔术巴士无处不在,无处不在。
编辑:您编辑的问题版本2 +
的答案使用Windows Service Bus 1.0,如何将事件存储中的序列号与服务总线上的序列号结合?
您的活动商店没有序列号。它具有每个聚合的提交序列号。您通常使用会话主题和订阅。然后,您需要选择是要全局排序(使用单个会话ID)还是每个聚合排序(使用流ID作为会话ID)。
一旦主题发生了事件,他们就会有一个MessageSequenceNumber
,并且订阅(当会话时)按顺序传递(实际上订阅者会收到它们)。
检测和处理已经以安全方式接收的事件(防止消息处理程序失败)的最佳做法是什么?
这内置于Service Bus(或任何排队机制)中。在成功处理消息之前,您不会将消息标记为已完成。任何失败都会导致放弃(将其放回队列进行重新处理)。
订阅者休息,断开连接或后续工作自然会被主题处理。