为了账号安全,请及时绑定邮箱和手机立即绑定

调用依赖微服务

调用依赖微服务

海绵宝宝撒 2021-12-10 16:33:30
假设我有 2 个微服务:Service1 和 Service2。他们每个人都有自己的数据库。Service1 有 EntityA,Service2 有 EntityBEntityA {    Long id;    //other fields    EntityB entity;}EntityB{     //other fields}我正在使用 Spring 的 RestTemplate 来检索和保存数据。问题是:当从 Service1 的数据库中检索 EntityA 时,我没有 EntityB 的数据,因为它们保存在 Service2 的数据库中,我知道我应该通过 RestTemplate 进行休息调用以从 Service2 的数据库中检索 EntityB,但是两者之间的关系如何?实体 - EntityA 是否仍应在内部包含整个 EntityB 对象,即使其字段除 id 外大部分时间都为空?我错过了什么?先感谢您。
查看完整描述

3 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

从技术角度来看,您的问题可以通过API Gateway 解决

简而言之,您应该定义一个新的微服务,例如gateway service,将由您的 API 客户端调用。该gateway service会又:

  1. 调用Service1Entity1idfor相处Entity2

  2. 调用Service2Entity2根据步骤 1 中的 id 获取。

  3. 聚合两个响应(在你的情况下,设置Entity2里面的值Entity1)。

  4. 将聚合响应返回给客户端。

设计时要记住两件事:

  • 您的 API 客户端不应该知道他的数据是由两个服务获取的。

  • 在网关中聚合客户端响应通常更清晰,因为它允许在您的微服务之间进行更高级别的解耦。例如,您可以按如下方式对实体进行建模(并删除Service1和之间的数据模型依赖项Service2,允许两个服务独立发展)。

请参阅以下代码段:

// In Service1

EntityA {

    Long bId; 

}


// In Service2

EntityB{


}


// In Gateway

Response {

    EntityA a;

    EntityB b;

}

天气Entity1应参考的决定Entity2不取决于您的数据如何分发,而是取决于您的业务需求。如果您有一个单体应用程序,并且在这种情况下Entity1引用Entity2是有意义的,那么在微服务环境中这样做仍然有意义。


查看完整回答
反对 回复 2021-12-10
?
www说

TA贡献1775条经验 获得超8个赞

我遇到了这种模式,我认为它对您的情况很有用。
该模式称为CQRS(Command Query Responsibility Segregation,一口)

该模式假设您有一个适当的事件溯源系统,自从您使用微服务以来,您已经有了很大的变化。

当任何EntityA服务1改变时,服务1发布一个事件。这同样适用于服务2,当任何EntityB Si变更也将发布事件。

然后我们有服务3订用来自的事件服务1服务2聚集在其本地数据库中的数据并将其存储。现在,所有你需要做的就是呼叫服务3,从获得agregated数据服务1服务2

当然,这种模式有其缺点,如最终一致性,但在某些情况下,它实际上可能是最合适的。

这个想法主要来自这里:https : //microservices.io/patterns/data/cqrs.html。我还会从这里至少阅读“何时使用此模式”部分:https : //docs.microsoft.com/en-us/azure/architecture/patterns/cqrs


查看完整回答
反对 回复 2021-12-10
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

我想到的两个解决方案既简单又复杂。

重复数据

在 MS 之间,通常有一个高度可用的发布-订阅或消息队列集群系统。当EntityB被保存在Service2你的事件发送到队列或发布-订阅系统。Service1可以订阅该特定事件并将有关信息存储EntityB在其自己的数据库中。

组域逻辑

也许,域Service1和之间的相关性太大了Service2。在这种情况下,您可能希望将您的服务分组为单个服务。


查看完整回答
反对 回复 2021-12-10
  • 3 回答
  • 0 关注
  • 275 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号