java - 项目架构,在核心和服务之间传输数据

标签 java spring architecture soa esb

我对我的英语感到抱歉。有一个大型 java 项目(spring、hibernatne 等)具有 monolite 架构。我们将其命名为核心。添加新功能是一项艰苦的工作,因此我们接受了从核心中创建新功能,然后通过 http(REST api) 链接它们的决定。现在有核心和围绕它的许多“服务”,但核心和服务只有一个数据库。服务之间不会传输任何数据。他们作为恶魔工作,或者核心向他们提出要求。当核心调用任何服务时,会发生以下情况:服务收到请求,直接向数据库进行 SQL 查询,对接收到的数据执行自己的逻辑并将结果返回给核心。我认为使用公共(public)数据库是一种不好的做法,因此我想关闭对数据库任何服务的直接完全访问。

我有两个想法:

  1. 为了进行修改,我想使用事件(创建、更新、删除)和 boker(ActiveMQ、RabbitMQ)
  2. 对于阅读,我有以下 3 个选择之一:

    2.1。为核心端的每个选择查询创建内部 API(这不是一个好的选择,因为我们不想经常重新编译核心)

    2.2。让服务直接从DB读取数据

    2.3。将 sql 查询打包到“服务”端的某个对象中并将其发送到核心,在那里查询将被解包并执行,结果将作为 JSON 数组发送回客户端。另外,在核心方面,我将检查它是否只是“选择”查询。

我想问你一个问题:

  1. 像这样将读取和修改分开是一个好的选择吗?
  2. 您可以推荐我哪些阅读选项?
  3. 如果我选择 2.3 选项进行阅读,您可以推荐我什么框架吗?我已经开始关注 JOOQ,但它可能根本不适合

谢谢

最佳答案

正确的方法是让服务独立工作,每个服务都有自己的数据库和队列,但您也可以使用外部提供程序,这可能是您当前的数据库。

使用事件在源数据库中进行数据更改是错误的,因为事件是已经发生的操作。事件就像触发器一样,即使您可以保留它们携带的数据,您也应该只在您的服务中实现数据冗余,即:运输服务需要知道客户端地址,以便它保留自己的该地址的副本,即使尽管地址存储在客户端服务中。

现在回到你的问题:

  1. 您可以将阅读和写作分开,但不能按照您描述的方式进行
  2. 选项 2.2 是更正确的选项。
  3. 为了阅读,请使用 JDBC 或一些精益的 orm,例如 Dapper

关于java - 项目架构,在核心和服务之间传输数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36811249/

相关文章:

asp.net-mvc - 如何使用 MVC Web 应用程序为 ASP.NET 设计插件架构

java - "No row with the given identifier exists"虽然它确实存在

Java useDelimiter 和 nextLine

java - 如何清理tomcat缓存?

Java邮件创建DSN(送达状态通知)

java - Spring注入(inject)XML未编码实体

architecture - 通过多个 .exe 编写应用程序是一种好习惯吗?

java - 如何正确使用乐观锁定,使用 Spring 和 Hibernate 捕获 StaleObjectState 异常

java - REST API - 嵌套对象

java - 开发应用程序监控仪表板的建议。类似于 Nagios 的东西