gpt4 book ai didi

spring-data-rest - 如何在基于 Spring Data REST/Spring HATEOAS 的(微)服务之间建立关系?

转载 作者:行者123 更新时间:2023-12-04 10:50:05 25 4
gpt4 key购买 nike

试图找出在使用基于 Spring Data Rest 或 HATEOAS 的基于超媒体的微服务时如何处理关系的模式。

如果您有服务 A(讲师)和服务 B(类(class)),每个都作为一个独立的应用程序存在。

在两个服务之间建立关系的首选方法是什么。以不需要外部服务 ID 列的方式。每个服务可能有许多其他需要在同一个庄园进行通​​信的服务。

可能的解决方案(不确定路径是否正确)

每个服务都有一个带有 OneToMany 的第二个表,其中包含服务中的主要实体。该表将具有以下字段:

ID、entityID、rel、relatedID

然后在相反的服务中使用 Spring Data Rest 设置一个 find 查询连接表以查找匹配的记录。

我想要实现的主要目标是任何服务都可以与任意数量的其他服务建立关系,而无需了解其他服务。

最佳答案

基本步骤如下:

  • 该服务需要发现其他服务的资源。
  • 然后,该服务会在必要时添加指向它呈现的资源的链接。

  • 我在 this repository 中有这些步骤的基本示例。 .该示例包含两个服务:一个为商店提供地理空间搜索的服务。第二个服务是一些基本的客户管理,如果商店服务当前可用,它可以选择与商店服务集成。

    以下是这些步骤的实现方式:

    资源发现

    在我的示例中,消费服务(即客户服务)使用 Spring HATEOAS' Traverson遍历一组链接关系直到找到名为 by-location 的链接的 API .这是在 StoreIntegration 中完成的.所以所有客户端服务需要知道的是根 URI(在我的例子中取自环境)和一组链接关系。它 periodically checks the link存在使用 HEAD -要求。

    这当然可以以更复杂的方式完成:将基本 URI 硬连接到客户端服务可能被认为是次优的,但如果您无论如何都使用 DNS,实际上效果很好(这样您就可以交换 URI 后面的实际主机硬编码)。尽管如此,这是一种不错的实用方法,如果它更改 URI,仍然会重新发现其他服务,不需要额外的库。

    对于更复杂的方法,请查看 Netflix' Eureka library这基本上是一个服务注册中心。此外,您可能想查看 Spring Cloud integration我们必须这样做。

    使用链接增加资源

    Spring HATEOAS 提供了一个 ResourceProcessor Spring Data REST 利用的 API。它允许您操作 Resource即将呈现的实例,例如添加链接。客户服务的实现可以找到 here .

    它基本上采用刚刚在上述步骤中发现的链接,并使用众所周知的参数扩展它,从而允许客户仅通过跟随链接来触发商店地理搜索。

    除此之外

    您可以在 Spring Cloud 的示例项目中找到此示例的更复杂的变体。 .它采用了相同的示例,但切换到 Spring Cloud 组件,例如 Eureka 集成、收集指标、添加 UI 等。

    关于spring-data-rest - 如何在基于 Spring Data REST/Spring HATEOAS 的(微)服务之间建立关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27790905/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com