我正在尝试使用微服务架构构建一个简单的应用程序。
以下是我创建的 3 个微服务的详细信息。
1] Customer.
database: mongodb
server : embeded tomcat server.
port : 8081
2] vendor.
database: mongodb
server : embeded tomcat server.
port : 8082
3] product.
database: mongodb
server : embeded tomcat server.
port : 8083
所有 3 个 micros 都在嵌入式 tomcat 服务器上运行。
现在我想为所有这些微型 [API 网关] 创建一个通用网关。
这有助于我根据收到的请求路由我的请求,例如:-
例如,如果我收到 http://hostname:port_of_gateway/customer 的请求.
在阅读本文时,我需要将请求路由到我的客户 micro 并获取其响应并将其发送回客户端。
我可以使用哪个 Spring 工具来实现这一目标?
最佳答案
因为您的要求非常简单,所以您可以自己实现这样的网关。这是an example .
但是如果你真的想使用一些 Spring 解决方案,你可以尝试使用 Spring Cloud Netflix这是 Spring Cloud 伞形项目的一部分。它包括 路由器和过滤器 功能又基于 Netflix Zuul网关服务。
请注意,这不是一个完整的独立应用程序,而是一个库。因此,您仍然应该创建另一个微服务,在您的应用程序中充当 API 网关。要使其成为网关,您只需添加 @EnableZuulProxy
对具有 @SrpingBootApplication
的同一类的注释注解。你可以找到一个很好的例子 here .
另请注意,您应该以某种方式通知网关有关您的微服务的重定向地址。它可以通过两种一般方式完成:
第一种方法简单明了,但不适用于大量微服务和/或微服务的位置可以动态变化(例如由于自动缩放)的情况。
第二种方法需要额外的组件——服务注册中心——并且需要修改其他微服务(让它们在注册中心注册自己)。这是相当复杂的方法,但在复杂架构的情况下是唯一可能的方法。可以在 same article 中找到简单而富有表现力的示例。 .
更新(2019 年 1 月)
截至 2018 年 12 月 Spring Cloud 团队 announced Spring Cloud 中几乎所有 Netflix 组件(Eureka 除外)都进入了维护模式。这意味着明年他们将不会收到任何功能更新(只有错误和安全修复)。
有replacements对于所有受影响的组件,包括上面提到的 Netflix Zuul。所以请考虑在新项目中使用 Spring Cloud Gateway 而不是它。
关于spring-boot - 哪个是使用 spring 的微服务的最佳 API 网关?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46390552/