我正在尝试使用微服务架构构建一个简单的应用程序。 以下是我创建的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并获取其响应并将其发送回客户端。 我可以使用哪种弹簧工具来实现这一目标?
答案 0 :(得分:2)
因为您的要求非常简单,您可以自己实现这样的网关。这是an example。
但是如果你真的想使用一些Spring解决方案,你可以尝试使用Spring Cloud Netflix这是Spring Cloud伞项目的一部分。它包括路由器和过滤器功能,而这些功能又基于Netflix Zuul网关服务。
请注意,这不是一个完整的独立应用程序,而是一个库。因此,您仍然应该创建另一个微服务,在您的应用程序中充当API网关。要使其成为网关,您只需将@EnableZuulProxy
注释添加到具有@SrpingBootApplication
注释的同一个类中。你可以找到一个非常好的例子here。
请注意,您应该以某种方式通知网关您的微服务'重定向的地址。它可以通过两种通用方式完成:
1st 方法既简单又直接,但对于大量微服务和/或微服务时并不是很好。位置可以动态变化(例如,由于自动缩放) 2nd 方法需要额外的组件 - 服务注册表 - 并且需要修改其他微服务(让它们在注册表中注册)。这是一种非常复杂的方法,但在复杂架构的情况下是唯一可行的方法。可以在same article中找到简单而富有表现力的示例。
截至2018年12月,Spring Cloud团队announced几乎所有Spring Cloud中的Netflix组件(Eureka除外)都进入了维护模式。这意味着明年他们将无法获得任何功能更新(仅限错误和安全修复) 所有受影响的组件都有replacements,包括上面提到的Netflix Zuul。因此,请考虑在新项目中使用Spring Cloud Gateway而不是它。