3

嗨,我有以下情况,

有两个单独的应用程序

  1. ShopManagament - 这处理商店的注册。包含骨料商店和其他骨料
  2. NotifyService - 这会发送邮件、短信、通知。包含聚合电子邮件、短信、通知

这两个应用程序都使用带有 DDD 的 CQRS/ES 构建。

用于构建应用程序的技术是带有 Axon 的 Spring 和用于消息传递的使用 RabbitMQ

步骤1 -

通过发出命令 ShopRegisrtraionCommand 来注册商店(当然这个句柄由商店聚合并在事件触发时更改状态),这会触发事件 ShopRegistratedEvent 。

第2步 -

当 shopShopRegistredEvent 被触发时,我有一个 EventHandler 监听 ShopRegistredEvent 并向 NotifyService 发送 SendEmailVerificationCommand(您可以说一个请求或它充当请求)。

第 3 步 -

Shop 聚合也处理相同的命令(SendEmailVerificationCommand),然后 shop 聚合触发事件 MailVerifcationSendedEvent,此事件将 Shop 的验证状态更改为“MailInSendingProcess”。

第 4 步 - 在另一侧 NotifyService 处理该命令(SendEmailVerificationCommand 或 request)并发送邮件,如果电子邮件成功发送,则 NotifyService 触发 VerificationEmailSent。

第 5 步 -

VerificationEmailSentEvent(由 NotifyService 触发)由 ShopManagment 应用程序使用事件侦听器进行侦听,然后此事件侦听器为商店聚合发出 VerificationMailSendedSuccesfullyCommand,然后商店聚合触发事件 VerificationEmailDeliveredEvent,这将更改验证状态“MailDelivered”。

第 6 步 -

如果由于任何原因导致邮件发送失败,NotifyService 会触发另一个事件 VerificationEmailSendingUnsuccessfullEvent,该事件由 ShopManagament 事件侦听器处理,并发出另一个命令 VerificationEmailUnsuccessfull 到商店聚合,然后商店聚合触发事件 VerficationMailSendingFailedEvent,此事件将验证状态的状态更改为“MailSendingFalied ”。

这里两个 BC 使用 request 和 event 进行通信。

问题 -

  1. 当我在我的应用程序中发送命令时,我们可以将命令发送到其他有界上下文还是有另一种方法。
  2. 跟踪电子邮件发送的状态是 Shop 聚合的一部分,还是我必须创建另一个聚合,例如 EmailVerifcation,因为我必须使用计划重新发送失败的邮件。
  3. 如果发生这种情况,还有其他方法可以管理这种事情吗?
4

1 回答 1

3

我之前已经看到在服务之间来回进行验证,但这通常是我希望避免的过程。对于相对简单的事情,它需要复杂的团队合作和服务;复杂性通常会在未来引起痛苦。

现在回答你的问题:

  1. 我会说这应该没问题。命令只不过是一种消息形式,就像查询或系统中的事件一样。不利的一面可能是发送命令的限界上下文应该知道其他限界上下文所说的“语言”。这里可能存在某种形式的反腐败层。将此视为一种服务,它以 BC-1 的语言接收命令发送请求并将其翻译成 BC-2 的语言。从 Axon Framework 的角度来看,我还建议设置DistributedCommandBus,因为它包含一个组件(CommandRouter准确地说是 ),它知道哪个节点可能处理哪些命令。

  2. & 3. 这完全取决于您的域是如何建模的。从表面上看,我会说一个Shop聚合通常不知道正在发送任何电子邮件,所以从那一刻起,我会说'不,不要将它包含在聚合中'。Saga 可能更适合向您的NotifyService. 那个 Saga 会听ShopRegistredEvent并且作为响应会将 发布SendEmailVerificationCommandNotifyService. Saga 能够对 的回调采取行动SendEmailVerificationCommand或处理VerificationEmailSentEventVerificationEmailSendingUnsuccessfullEvent在(不)成功的电子邮件之后执行所需的后续逻辑。

希望这能给你一些见解阿什瓦尼!

于 2018-07-18T09:16:51.040 回答