Spring Cloud教程-通过 Zuul API 网关执行请求
通过 Zuul API 网关执行请求
步骤 1: 运行 netflix-eureka-naming-server。
步骤 2: 在端口 8000 上运行 currency-exchange-service。
步骤 3: 在端口 8100 上运行 currency-conversion-service。
步骤 4: 运行 netflix-zuul-api-gateway-server。
步骤 5: 打开浏览器,调用 URL [http://localhost:8761](http://localhost:8761/)
。它显示所有已在 Eureka 命名服务器上注册的服务。
步骤 6: 调用 URL http://localhost:8000/currency-exchange/from/EUR/to/INR
。我们会收到响应,但请求不会经过 Zuul API 网关。
让我们通过 Zuul API 网关执行请求。我们使用以下 URL:http://localhost:8765/{application-name}/{uri}
。端口 8765 是 Zuul API 网关服务器的默认端口。
在我们的案例中,应用程序名称 是 currency-exchange-service,URI 是 /currency-exchange/from/EUR/to/INR。因此,完整的 URL 如下所示:
http://localhost:8765/currency-exchange-service/currency-exchange/from/EUR/to/INR
步骤 7: 复制上述 URL 并将其粘贴到浏览器中。我们会收到与上面相同的响应,但这次请求通过了 Zuul API 网关。
我们还可以看到打印在 Zuul API 网关服务器上的请求内容。请求打印了请求 URI。
我们已经通过 Zuul API 网关发送了请求,而不是直接调用微服务。
在微服务调用之间设置 Zuul API 网关
在前一步中,我们使用直接的 URL 执行了通过 Zuul API 网关代理的 currency-exchange-service。当我们使用 URL http://localhost:8765/currency-exchange-service/currency-exchange/from/EUR/to/INR
时,它使用端口 8765,这是 API 网关的代理。
在本节中,我们将调用 currency-calculation-service(currency-conversion-service),该服务调用 currency-exchange-service。到目前为止,我们一直在直接调用该服务。现在,我们将通过 Zuul API 网关调用它,而不是直接调用 currency-exchange-service。
步骤 1: 选择项目 currency-conversion-service。
步骤 2: 打开 CurrencyExchangeServiceProxy.java 文件。
步骤 3: 使用注解 @FeignClient 和属性 name="netflix-zuul-api-gateway-server" 启用 Feign。
- @FeignClient(name="netflix-zuul-api-gateway-server")
记住:删除或注释掉 CurrencyExchangeServiceProxy.java 文件中的所有其他注解 @FeignClient。
步骤 4: 为 Zuul API 网关服务器定义 映射。
- @GetMapping("/currency-exchange-service/currency-exchange/from/{from}/to/{to}")
记住:删除或注释掉 currency-exchange-service 的映射。
步骤 5: 以我们编写的顺序依次运行 netflix-eureka-naming-server、currency-exchange-service、currency-conversion-service 和 netflix-zuul-api-gateway-server。
记住:确保所有 四个 服务都正常运行。
步骤 6: 打开浏览器,调用 URL http://localhost:8100/currency-converter-feign/from/USD/to/INR/quantity/1000
。它返回以下响应:
让我们看看 NetflixZullApiGatewayServerApplication 的日志。
步骤 7: 点击控制台图标旁边的箭头,并选择 NetflixZullApiGatewayServerApplication。
它显示了一些日志,如下图所示。
步骤 8: 再次刷新 URL。它在控制台上显示一个日志。
每当我们通过 Feign 调用 CurrencyClaculationService(currency-converter-service)时,它都会通过 API 网关服务器进行路由。网关执行了一个名为 ZuulLoggingFilter 的过滤器,该过滤器调用了 currency-exchange-service。
现在让我们拦截 currency converter-service 和 currency-exchange-service 之间的调用。这意味着在调用 URL 时,API 网关会执行 两次。
- 第一次,当我们调用 currency-conversion-service 时,API 网关会执行。这意味着在执行 currency-conversion-service 之前。currency-conversion-service 通过 API 网关路由。
- 第二次,当 currency-conversion-service 调用 currency-exchange-service 时,API 网关会执行。这意味着在执行 currency-conversion-service 之后,但在执行 currency-exchange-service 之前。currency-exchange-service 也通过 API 网关路由。
让我们在项目中实现拦截。
通过 API 网关发送请求 [http://localhost:8765](http://localhost:8765/)
。URI 将为 /{application-name}/{uri}。完整的 URL 如下所示:
http://localhost:8765/currency-conversion-service/currency-converter-feign/from/USD/to/INR/quantity/1000
调用上述 URL。它返回与 URL http://localhost:8100/currency-converter-feign/from/USD/to/INR/quantity/1000
返回的相同响应。
我们可以在日志中看到,日志过滤器执行了 两次。第一次它调用了 currency-converter-service,第二次是在 currency-converter-service 调用 currency-exchange-service 时。
在本节中,我们已经通过 Zuul API 网关服务器执行了这两个服务。