【发布时间】:2020-03-04 16:17:19
【问题描述】:
我有一个 Spring Boot 应用程序为 REST 请求公开一些端点。我正在尝试解耦两个组件(它们当前直接调用彼此的代码),并且我希望它们相互发出 REST 请求(用于最终的微服务实现)。我知道端点发现可以通过发现服务(例如 Eureka)来完成,但是有没有办法将需要它的服务的参数信息传递给请求它的客户端? 示例:我有一个购物车服务,它依赖于有关可供购买的产品的信息。使用 Eureka(或其他服务发现工具)我可以注册我的服务,以便购物车服务现在知道产品服务。如果产品服务有类似的东西:
@GetMapping("/product")
public Product findById(@RequestParam int id) {
return products.find(id);
}
我知道要使用此端点获取 ID 为 3 的产品,购物车服务必须向 http://localhost:1234/product?id=3 发出请求,但有没有办法在运行时发现这些参数及其所需类型?在我的示例中,如果我使用 Eureka,购物车服务会动态了解产品服务的位置,但不会了解其端点将接受的参数。我知道 Spring Boot Actuator 应该提供此信息,但每当我使用它时,我的端点的 params 字段始终为空。
【问题讨论】:
-
swagger 可以用吗?
-
@Vishrant Swagger 是否允许在应用程序级别公开信息?我已经在浏览器中使用它来测试我的 API,但我从未在一项服务中利用它来获取有关另一项服务的信息。
-
不确定你所说的“应用程序级别”是什么意思,但你可以通过
Swagger以JSON的形式公开你的API(然后你可以在你的应用程序中解析它),检查这个答案stackoverflow.com/a/56511473/2704032,JSON将通过此端点获得http://<host>:<port>/v2/api-docs
标签: java spring-boot rest microservices service-discovery