嗨,我有以下情况,
有两个单独的应用程序
- ShopManagament - 这处理商店的注册。包含骨料商店和其他骨料
- 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 进行通信。
问题 -
- 当我在我的应用程序中发送命令时,我们可以将命令发送到其他有界上下文还是有另一种方法。
- 跟踪电子邮件发送的状态是 Shop 聚合的一部分,还是我必须创建另一个聚合,例如 EmailVerifcation,因为我必须使用计划重新发送失败的邮件。
- 如果发生这种情况,还有其他方法可以管理这种事情吗?