- 内容提要
- 译者序
- 前言
- 第 1 章 欢迎迈入云世界,Spring
- 第 2 章 使用 Spring Boot 构建微服务
- 第 3 章 使用 Spring Cloud 配置服务器控制配置
- 第 4 章 服务发现
- 第 5 章 使用 Spring Cloud 和 Netflix Hystrix 的客户端弹性模式
- 第 6 章 使用 Spring Cloud 和 Zuul 进行服务路由
- 第 7 章 保护微服务
- 第 8 章 使用 Spring Cloud Stream 的事件驱动架构
- 第 9 章 使用 Spring Cloud Sleuth 和 Zipkin 进行分布式跟踪
- 第 10 章 部署微服务
- 附录 A 在桌面运行云服务
- 附录 B OAuth2 授权类型
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
6.6 构建接收关联 ID 的后置过滤器
记住,Zuul 代表服务客户端执行实际的 HTTP 调用。Zuul 有机会从目标服务调用中检查响应,然后修改响应或以额外的信息装饰它。当与以前置过滤器捕获数据相结合时,Zuul 后置过滤器是收集指标并完成与用户事务相关联的日志记录的理想场所。我们将利用这一点,通过将已经传递给微服务的关联 ID 注入回用户。
我们将使用 Zuul 后置过滤器将关联 ID 注入 HTTP 响应首部中,该 HTTP 响应首部传回给服务调用者。这样,就可以将关联 ID 传回给调用者,而无需接触消息体。代码清单 6-13 展示了构建后置过滤器的代码。这段代码可以在 zuulsvr/src/main/java/com/thoughtmechanix/zuulsvr/filters/ResponseFilter.java 中找到。
代码清单 6-13 将关联 ID 注入 HTTP 响应中
package com.thoughtmechanix.zuulsvr.filters;
// 为了简洁,省略了 import 语句
@Component
public class ResponseFilter extends ZuulFilter {
private static final int FILTER_ORDER = 1;
private static final boolean SHOULD_FILTER = true;
private static final Logger logger =
→ LoggerFactory.getLogger(ResponseFilter.class);
@Autowired
FilterUtils filterUtils;
@Override
public String filterType() { ⇽--- 要构建一个后置过滤器,需要设置过滤器的类型为 POST_FILTER_TYPE
return FilterUtils.POST_FILTER_TYPE;
}
@Override
public int filterOrder() {
return FILTER_ORDER;
}
@Override
public boolean shouldFilter() {
return SHOULD_FILTER;
}
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
logger.debug("Adding the correlation id to the outbound headers. {}",
→ filterUtils.getCorrelationId());
ctx.getResponse().addHeader( ⇽--- 获取原始 HTTP 请求中传入的关联 ID,并将它注入响应中
→ FilterUtils.CORRELATION_ID,
→ filterUtils.getCorrelationId());
logger.debug("Completing outgoing request for {}.", ⇽--- 记录传出的请求 URI,这样就有了“书挡”,它将显示进入 Zuul 的用户请求的传入和传出条目
→ ctx.getRequest().getRequestURI());
return null;
}
}实现完 ResponseFilter 之后,就可以启动 Zuul 服务,并通过它调用 EagleEye 许可证服务。服务完成后,就可以在调用的 HTTP 响应首部上看到一个 tmx-correlation-id 。图 6-14 展示了从调用中发回的 tmx-correlation-id 。

图 6-14 tmx-correlation-id 已被添加到发送回服务客户端的响应首部中
到目前为止,我们所有的过滤器示例都是在路由到目的地之前或之后对服务客户端调用进行操作。对于最后一个过滤器示例,让我们看看如何动态地更改用户要到达的目标路径。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论