是否可以基于目标URL禁用Spring Cloud Sleuth头传播?
我们使用Brave的是否可以基于目标URL禁用Spring Cloud Sleuth头传播?,spring,spring-boot,spring-cloud-sleuth,Spring,Spring Boot,Spring Cloud Sleuth,我们使用Brave的ExtraFieldPropagation功能在服务之间传播自定义字段(例如,仅限内部的请求标识符)作为HTTP头 在处理请求的过程中,我们的一些服务使用RestTemplate或外部客户端向外部服务发出请求。由于Sleuth使用传播特性增强了所有restemplatebean和外部客户机,这意味着外部服务只接收内部头,这是我想要避免的 我知道有两种变通方法可以避免这种行为,这两种方法都有缺陷: 手动实例化客户机对象,而不是使用@Bean,这样Sleuth就不会添加拦截器。
ExtraFieldPropagation
功能在服务之间传播自定义字段(例如,仅限内部的请求标识符)作为HTTP头
在处理请求的过程中,我们的一些服务使用RestTemplate
或外部客户端向外部服务发出请求。由于Sleuth使用传播特性增强了所有restemplate
bean和外部客户机,这意味着外部服务只接收内部头,这是我想要避免的
我知道有两种变通方法可以避免这种行为,这两种方法都有缺陷:
- 手动实例化客户机对象,而不是使用
,这样Sleuth就不会添加拦截器。我在这里看到的缺点是,开发人员必须记住遵循这种模式以避免信息泄漏,这很难实施@Bean
- 添加一个拦截器,从传出请求中删除这些头。这里的缺点是a)我需要为
和外国客户分别设置拦截器(不是什么大买卖);b) 看起来伪客户端拦截器没有办法影响执行顺序(参见javadoc),因此我不能保证新拦截器将在Sleuth拦截器之后/最后运行restemplate
有没有一种方法可以定制Sleuth(例如,通过某种注入器bean),以便在向传出HTTP请求中注入头之前,我可以推断请求的目的地?我看到了关于的文档,但这些文档似乎不再存在于spring boot>=2中。我在Brave中似乎找不到等效的构造。您可以对给定的URL取消采样,这意味着头将被传播,但不会发送到Zipkin。您不能仅对某些URL禁用检测,因为我们正在检测所有注册为bean的组件。非常感谢您的关注,Marcin!