哪个是使用spring的微服务的最佳API网关?

时间:2017-09-24 13:27:44

标签: spring-boot microservices

我正在尝试使用微服务架构构建一个简单的应用程序。 以下是我创建的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个微观运行在嵌入式tomcat服务器上。 现在我想为所有这些微[API网关]创建一个通用网关。 它帮助我根据我得到的请求路由我的请求: - 例如,如果我收到http://hostname:port_of_gateway/customer的请求。 在阅读本文时,我需要将请求发送给我的客户micro并获取其响应并将其发送回客户端。 我可以使用哪种弹簧工具来实现这一目标?

1 个答案:

答案 0 :(得分:2)

因为您的要求非常简单,您可以自己实现这样的网关。这是an example

但是如果你真的想使用一些Spring解决方案,你可以尝试使用Spring Cloud Netflix这是Spring Cloud伞项目的一部分。它包括路由器和过滤器功能,而这些功能又基于Netflix Zuul网关服务。

请注意,这不是一个完整的独立应用程序,而是一个库。因此,您仍然应该创建另一个微服务,在您的应用程序中充当API网关。要使其成为网关,您只需将@EnableZuulProxy注释添加到具有@SrpingBootApplication注释的同一个类中。你可以找到一个非常好的例子here

请注意,您应该以某种方式通知网关您的微服务'重定向的地址。它可以通过两种通用方式完成:

  1. 通过静态定义网关微服务配置中的地址;
  2. service discovery pattern与...结合使用Netflix Eureka服务注册。
  3. 1st 方法既简单又直接,但对于大量微服务和/或微服务时并不是很好。位置可以动态变化(例如,由于自动缩放) 2nd 方法需要额外的组件 - 服务注册表 - 并且需要修改其他微服务(让它们在注册表中注册)。这是一种非常复杂的方法,但在复杂架构的情况下是唯一可行的方法。可以在same article中找到简单而富有表现力的示例。

    更新(1月' 19)

    截至2018年12月,Spring Cloud团队announced几乎所有Spring Cloud中的Netflix组件(Eureka除外)都进入了维护模式。这意味着明年他们将无法获得任何功能更新(仅限错误和安全修复) 所有受影响的组件都有replacements,包括上面提到的Netflix Zuul。因此,请考虑在新项目中使用Spring Cloud Gateway而不是它。