【发布时间】:2021-01-04 14:52:23
【问题描述】:
在微服务架构中,使用客户端包在服务之间进行通信,我们遇到了两个客户端包相互依赖的问题,从而产生了循环依赖。
我们正在尝试找出最佳解决方案,我想知道是否有人能够帮助或为我们指明正确的方向。
这是场景:
- 两种服务,汽车和保险
- 两个客户端包,CarClient 和 InsuranceClient。
当任何服务需要与 Car 服务通信时,它应该使用 CarClient 包来完成。并且每当任何服务需要与 Insurance 服务进行通信时,它都应该使用 InsuranceClient 包。
CarClient 包有一个数据传输对象 (DTO) Car,其中一个属性是 insurance。此属性的类型是 InsuranceClient 包中可用的 DTO,CarInsurance。
问题在于CarInsurance DTO 需要访问 CarClient 包中可用的枚举 CarTypeEnum。现在我们有了两个相互依赖的包。
我能想到的可能解决方案:
- 这是由于设计不当造成的。重新设计服务和包以防止这种循环依赖。
- 将枚举移动到单独的包中,因此,两个客户端都可以依赖这些包,但客户端不会相互依赖。
感谢任何帮助。
【问题讨论】:
-
为什么汽车和保险是两个独立的客户/服务?你能把两者合并吗?我只是一个新手,我不知道您的应用程序的详细信息,但是如果这两个服务已经相互依赖,为什么不把所有东西都放在一个屋檐下呢?
-
保险服务执行多项与汽车无关的任务,包括其他类型的保险(例如:家庭保险)。微服务的想法是将这些任务解耦到它们自己的存储库(服务)中,这样我们就可以更有效地编码和部署。然而,这是有代价的,因为它确实增加了一些复杂性。
-
您是在谈论 Java 意义上的
package吗?因为那为什么在这种情况下循环依赖会成为问题? -
您是否想让您的服务工作过度?诸如注册汽车并在一次通话中为其添加保险计划之类的事情?那么可能你想把两个责任分开,一个是注册汽车,然后添加保险计划,这只是一个例子,如果你能解释一下情况,我可以给一些更好的主意。
标签: php node.js microservices