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

标签 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 个 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 .

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

  • 通过静态定义网关微服务配置中的地址;
  • 通过申请 service discovery pattern结合例如Netflix Eureka服务注册表。

  • 第一种方法简单明了,但不适用于大量微服务和/或微服务的位置可以动态变化(例如由于自动缩放)的情况。
    第二种方法需要额外的组件——服务注册中心——并且需要修改其他微服务(让它们在注册中心注册自己)。这是相当复杂的方法,但在复杂架构的情况下是唯一可能的方法。可以在 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/

    相关文章:

    java - Spring Security 使用 RequestParam 时不断要求登录

    java - 其他文件中的 JSP 模板 - Spring Boot

    events - 关于事件驱动拓扑中的中介器

    java - 为 Spring Boot 微服务创建 pojo

    twitter-bootstrap - intelliJ html 类属性自动完成

    maven - 如何在spring boot中创建单个可执行文件war

    azure - 如何设计 Azure Service Fabric 中的层

    docker - 这是在多主机网络上的生产中部署 spring boot cloud netflix 的正确方法吗?

    docker - 无法从同一网络中的另一个测试容器连接到 neo4j 测试容器

    java - 表 'acme_ms.hibernate_sequence' 不存在