【问题标题】:Is it possible to disable Spring Cloud Sleuth header propagation based on destination URL?是否可以基于目标 URL 禁用 Spring Cloud Sleuth 标头传播?
【发布时间】:2020-03-30 18:08:26
【问题描述】:

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

我们的一些服务在处理请求的过程中使用RestTemplate 或 Feign 客户端向外部服务发出请求。由于 Sleuth 使用传播功能增强了所有 RestTemplate bean 和 Feign 客户端,这意味着外部服务接收仅限内部的标头,我想避免这种情况。

我知道有两种解决方法可以让我避免这种行为,但这两种方法都有缺陷:

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

有没有办法自定义 Sleuth(例如,通过某种注入器 bean),这样,在向传出的 HTTP 请求注入标头之前,我可以推断出请求的目的地?我看到了有关 custom injector beans 的文档,但似乎那些在 spring boot >= 2 中不再存在。我似乎在 Brave 中找不到等效的构造。

【问题讨论】:

    标签: spring spring-boot spring-cloud-sleuth


    【解决方案1】:

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

    【讨论】:

    • 非常感谢您观看,Marcin!
    • 我也面临同样的问题。我不希望侦探在进行外部 api 调用时添加标头变量。 @Marcin Grzejszczak 是否仍然无法通过配置来防止这种情况?
    • 是的,您不能将该 RestTemplate 注册为 bean,或者您可以从 RestTemplate bean 中删除侦听器。
    猜你喜欢
    • 1970-01-01
    • 2020-05-28
    • 2021-06-07
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    • 2019-01-19
    相关资源
    最近更新 更多