提问者:小点点

是否可以根据目标URL禁用Spring Cloud Sleuth标头传播?


我们正在使用Brave的ExtraFieldPropagation特性将服务之间的自定义字段(例如,仅限内部的请求标识符)作为HTTP标头进行传播。

我们的一些服务在处理请求的过程中使用RestTemplate或外国客户端向外部服务发出请求。由于Sleuth使用传播特性增强了所有RestTemplate bean和外部客户机,这意味着外部服务只接收内部头,这是我想要避免的。

我知道有两种变通方法可以避免这种行为,这两种方法都有缺陷:

  • 手动实例化客户端对象,而不是使用Bean,这样Sleuth就不会添加拦截器。我在这里看到的缺点是,开发人员必须记住遵循这种模式以避免信息泄漏,这很难实施
  • 添加一个拦截器,从传出请求中删除这些标头。这里的缺点是a)我需要为RestTemplate和外国客户提供单独的拦截器(不是什么大买卖);b) 看起来外国客户机拦截器无法影响执行顺序(请参见此处的javadoc),因此我不能保证新拦截器将在Sleuth拦截器之后/最后运行

有没有一种方法可以定制Sleuth(例如,通过某种注入器bean),以便在向传出HTTP请求中注入头之前,我可以推断请求的目的地?我看到了有关定制喷油器bean的文档,但这些文档似乎在spring boot中已经不存在了


共1个答案

匿名用户

您可以取消对给定URL的采样,这意味着标头将被传播,但不会发送到Zipkin。您不能仅对一些URL禁用检测,因为我们正在检测注册为bean的所有组件。