2017-09-24 47 views
-1

我想用微服务体系结构来构建一个简单的应用程序。 以下是我创建的3个微服务的详细信息。这是使用spring的微服务的最佳API网关吗?

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并获取其响应并将其发送回客户端。 我可以使用哪种弹簧工具来实现此目的?

回答

1

由于您的要求非常简单,您可以自己实施这样的网关。这里是an example

但是,如果您确实想要使用某种Spring解决方案,则可以尝试使用属于Spring Cloud伞项目的一部分Spring Cloud Netflix。它包括路由器和过滤器功能,这些功能依次基于Netflix Zuul网关服务。

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

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

  1. 通过静态地定义网关微服务的配置中的地址;
  2. 通过将service discovery pattern与例如, Netflix Eureka服务注册表。

第一方法是简单和直接的,但不是非常好大量微服务和/或当微服务的位置可以动态地改变(例如,由于自动缩放)的。
2nd方法需要额外的组件 - 服务注册表 - 并且需要修改其他微服务(让它们在注册表中注册自己)。这是相当复杂的方法,但是在复杂体系结构的情况下是唯一可能的。简单而富有表现力的例子可以在same article中找到。

+0

谢谢@ g00glen00b的注意,但我没有说明使用Zuul需要Eureka。第一种方法既没有提到Zuul,也没有第二种方法只需要Eureka。完全取决于应用程序的设计者使用什么方法和选择什么工具。 – Toparvion