使用RabbitMQ的事件驱动微服务[已关闭]

vfhzx4xs  于 2022-12-13  发布在  RabbitMQ
关注(0)|答案(1)|浏览(206)

已关闭。此问题为opinion-based。当前不接受答案。
**想要改进此问题吗?**请更新问题,以便editing this post可以使用事实与引用来回答.

4天前关闭。
Improve this question
我们正在将monolith应用程序迁移到微服务。我们现在需要帮助如何为以下场景设计RabbitMQ通信:
我们有3项服务

订单服务

  • 发布“order.created”事件
    送货服务
  • 发布“delivery.created”事件
    通知服务
  • 使用“order.created”并发送电子邮件和推送通知
  • 使用“delivery.created”并发送电子邮件和短信通知。

需要记住的一些事情是

  • 任何事件都不能丢失;延迟处理是可以的。
  • 如果处理失败,那么它应该是可重新排队的(例如死信队列)。
  • 将通知服务划分为电子邮件、推送和短信服务,这将是一个工程。

我们讨论了一些解决方案,如

  • 不同通信通道的不同队列,例如“通知订单创建电子邮件”、“通知订单创建推送”或“通知交付创建短信”
  • 一个队列用于order.created事件,一个队列用于delivery.created事件。然后通知服务决定并发送该特定事件的通知类型?
    我们的问题是哪种方法更好?
ar5n3qh5

ar5n3qh51#

就我个人而言,我不会使用这两种方法,而是使用以下方法--尽可能地使Notification-service“哑”(甚至可能不是服务,而只是一个库),因此它将不包含任何业务/域逻辑,因此它只处理将消息发送到目标的操作(短信、电子邮件、推送),并拥有自己的专用队列 “通知”,可接受包含所需数据的消息(即目标,通知和一些用于监视目的的关联数据)。否则,由于业务/域更改,您将需要更改通知服务,而这些更改实际上应属于其他服务(例如,将来您可能需要仅为已创建订单的某个子集发送特定通知,这可能会使您陷入相当大的如果X1 M1 N1 X决定应该发送什么通知,则是一种尴尬情形)。

相关问题