如何在Spring云模块微服务中共享数据库连接。如果有许多微服务,我如何使用相同的数据库连接,或者我应该为每个微服务使用数据库连接?
答案 0 :(得分:1)
在我看来,你所要求的东西是不可能的,因为每个微服务都是一个专用的进程,它在自己的JVM中运行(可能在多个服务器中运行)。当您创建与数据库的连接时(假设您使用连接池),它始终位于单个JVM的级别。
我明白,你可能意味着不同的东西,但我不得不戴上它,因为它直接回答了你的问题
现在,您可以在微服务(相同的模式,表等)之间共享相同的数据库,以便每个JVM都打开一组连接(根据连接池定义)。 但是,这是一个非常糟糕的做法 - 您不想在微服务之间共享数据库。原因是改变的代价:如果你(作为微服务A的维护者)决定改变其中一个表,现在所有的微服务都必须支持这个,这不是一件容易的事。
因此,更好的方法是拥有一项承担全部责任的服务。对于某些域中的数据。现在,所有服务都可以联系此服务,并通过完善的API来请求所需的数据,这些API永远不会被破坏。在这种方法中,变革的成本要低得多,而且价格便宜。因为只有这个"数据服务"应该以不破坏现有API的方式进行更改。
现在关于数据库连接的事情:你通常会有多个运行相同微服务的JVM(比如数据微服务),所以,不是你在它们之间共享连接,而是你以相同的方式共享使用数据库(因为它毕竟是相同的代码)。
答案 1 :(得分:0)
在处理mircoservice架构时,通常情况下您拥有分布式系统。
大多数彼此通信的微服务不在同一台机器,实例或容器上。它们之间的通信最常通过http进行,但还有很多其他方式。
我建议围绕应用程序的一个问题设计mircoservices。例如,在您的情况下,您可以使用“持久性微服务”来负责处理单个或多个类型数据存储上的数据持久性操作。它可能处理关系数据库,noSQL,文件存储等。然后,通过REST端点,您可以将任何持久性功能暴露给处理业务逻辑的mircoservices。
在Spring Data REST项目的帮助下,构建这样的REST服务非常简单。
要回答您的实际问题,我不知道如何分享流程之间的实际连接。除此之外,在同一个实例上运行许多微服务并不是一个很好的做法。
Mircoservices现在非常受欢迎,每个人都试图过渡到他们。我的建议是确保你不要“过度设计”你的项目。
希望我没有误解你的问题,但公平地说它有点模糊。如果您可以提供更详细的架构和用例说明,我可以建议您使用更多工具/框架来实现阴天目标。
答案 2 :(得分:0)
首先也是最重要的 - 您的微服务应负责处理给定业务域/有界上下文中的所有数据。所以问题是 - '为什么你需要在微服务之间共享数据库连接,这不是一个标志,你在切片系统时走得太远了吗?微服务是一种工具,“微”这个词可能会有点误导:)
如需更多阅读,我建议例如https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/architect-microservice-container-applications/identify-microservice-domain-model-boundaries(别担心,它也足以适用于Spring)。