HATEOAS 微服务的跨服务链接

Posted

技术标签:

【中文标题】HATEOAS 微服务的跨服务链接【英文标题】:Cross-service linking for HATEOAS micro-services 【发布时间】:2015-01-07 10:00:36 【问题描述】:

我有许多使用 Spring Boot 构建的微服务,所以为了找点乐子,我想我应该尝试向它们添加 HATEOAS 以帮助建立跨资源链接。它似乎在特定项目中工作得很好,但我想知道是否有一种跨 API 链接的好方法。例如,假设我有 3 个服务:

用户详细信息服务: 代码:

/users/userid

用户日历服务: 代码:

/users/userid/appointments
/users/userid/appointments/appointmentid

用户消息服务: 代码:

/users/userid/messages
/users/userid/messages/messageid

要通过 API 进行浏览,最好有从用户资源到其约会和消息的链接。同样,最好从这些资源中获得链接。当我在类路径上拥有一个包含所有内容的 API 时,这一切都是可以实现的,我可以在其中编写如下代码:

代码:

user.add(linkTo(methodOn(CalendarController.class).appointments(user.getKey())).withRel("appointments"))

但是,如果 CalendarController 不在我当前访问的服务的类路径上,我将无法执行此操作。

是否有一个好的/推荐的方法来创建当前项目中没有的控制器的链接?

引用自spring forums

【问题讨论】:

我们有完全相同的问题。我们已经考虑过使用一个 JAR 来定义路径并共享它以及公开路径的资源并让 API 相互通信。这两种解决方案都有缺点。迫不及待想看到有关此的任何答案 这里也一样。我们正在考虑开发我们自己的 DSL 来构建和共享链接。在我们的用例中,这些链接将被共享给一个 zookeeper 节点,然后服务可以请求指向其他资源的链接。如果 Spring HATEOAS 现在或不久的将来提供解决方案,那么最终沿着这条路走下去会很好。 我想我们问的是同一件事。 ***.com/questions/27790905/… 【参考方案1】:

也许这比您希望的要复杂一些,但正如 here 所提到的,这正是 Eureka 的用途。它还与新的Spring Cloud 项目进行了非常好的集成。

【讨论】:

以上是关于HATEOAS 微服务的跨服务链接的主要内容,如果未能解决你的问题,请参考以下文章

微服务可靠性设计

谈谈微服务设计中的API网关模式

微服务漫谈 | 自建API网关之架构设计篇

微服务架构的永恒话题:服务治理分布式事务

微服务架构之永恒话题:服务治理与分布式事务

提起微服务架构,有两个永恒话题:服务治理分布式事务