【问题标题】:Domain-Event-Driven Architecture领域事件驱动架构
【发布时间】:2025-06-23 03:30:02
【问题描述】:

我正在使用 Java 启动一个 Web 应用程序项目,并且一直在研究采用哪种架构。

它将有 n 个服务(计费、报告、销售、CRM 等),这些服务可能会或可能不会作为独立的 web 应用程序运行。

我真的很喜欢领域事件驱动的方法。问题是,我以前从来没有做过这么大的项目,如果能听到一些关于走哪条路的想法和提示,我将不胜感激。

对于领域事件驱动架构,我的主要疑问是:

  • 如果我需要来自其他服务的一些数据,是否可以为其创建 Web 服务并从那里访问所有数据?我会在这里产生更深的耦合,这就是我想要避免的。还有哪些其他方法?

  • 持久性是如何实现的?每个服务都有自己的数据库吗?服务的 DB 之间没有关系?

  • 如果服务失败怎么办?它会丢失所有消息,因此无法采取相应的措施,对吧?有什么解决方法吗?

  • 如果 ActiveMQ 失败怎么办?

提前非常感谢!

【问题讨论】:

    标签: java architecture soa


    【解决方案1】:

    如果我需要来自其他服务的一些数据,是否可以为它创建一个 Web 服务并从那里访问所有数据?

    是的。

    我会在这里产生更深层次的耦合,而这正是我想要避免的。

    错误。你应该解释一下你认为这里会发生什么耦合。

    还有哪些其他方法?

    面向服务的架构一直都在这样做。替代方案更加紧密耦合。

    持久性是如何完成的?每个服务都有自己的数据库吗?

    是的。服务是独立的。服务通常是大型打包应用程序的一部分。

    服务的数据库之间没有关系?

    正确。

    如果服务失败怎么办?

    无赖。请求在队列中备份,直到您重新启动服务。

    它会丢失所有消息,因此无法采取相应的操作,对吗?有什么解决方法吗?

    错误。完全错误。您可以使用持久、可靠的消息队列。

    如果 ActiveMQ 失败了怎么办?

    然后我们所知道的世界就结束了。 “失败”是什么意思?这是一个相当松耦合的系统,允许许多问题发生并得到解决。

    【讨论】:

    • 非常感谢您抽出宝贵时间!这很有帮助。
    • @alan.reid:消息不是“事物”。它不会崩溃。拥有队列一部分的主机可能会停止,但队列作为一个整体,在任何地方都不存在。
    • 不,我知道,请原谅我的困惑,我指的是消息代理本身。现在这并不重要,这只是一个假设的场景。再次感谢!