这是我的第一个问题,如果不清楚或不完整,请原谅,让我知道如何提供更多信息。
我正在尝试使用 CQRS + ES 构建电子邮件票务系统。因此,电子邮件被加入到对话中(有点像 Outlook 对话,但加入的标准不同),然后这些对话被分配一张票,人们可以与之互动(标记它,更新它的状态,添加注释......)。
目前,一旦收到邮件,就会创建一个引发MailReceived
事件的新邮件聚合。
ProcessManager
路由器(或传奇路由器)尝试根据条件找到匹配的“ConversationSaga”或创建一个新的。saga 发送一个命令,将对话 Id 分配给 Mail 聚合 --> 引发ConversationAssigned
邮件。
最后一个事件ConversationAssigned
被 Ticketing 有界上下文拦截,该上下文会根据对话 Id 生成票证或更新现有票证。创建/更新票证后,该事件将被路由到 ConversationSaga 以发送所需的命令(ApplyTicketToMail --> MoveMailToFolder --> ...)
我的问题是:
1-使用 Saga Id 作为将多个邮件链接在一起的对话 Id 是否异常?
2-我正在检查创建Conversation Aggregate
根的可能性,但我对事件溯源仍然很陌生,并且不知道如何处理 AggregateRoots 中的事件溯源实体(我需要 Mail 作为事件溯源聚合)。
PS:我使用的是 C#,带有 MsSql DB 和 nhibernate,并且消息传递是通过 RabbitMq 进行的。