Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot Spring sleuth行李密钥未被传播_Spring Boot_Spring Cloud Sleuth_Distributed Tracing_Brave - Fatal编程技术网

Spring boot Spring sleuth行李密钥未被传播

Spring boot Spring sleuth行李密钥未被传播,spring-boot,spring-cloud-sleuth,distributed-tracing,brave,Spring Boot,Spring Cloud Sleuth,Distributed Tracing,Brave,我有一个过滤器(OncePerRequestFilter),它基本上拦截传入的请求并记录traceId、spanId等,效果很好, 此过滤器位于一个公共模块中,该模块包含在其他项目中,以避免在我的所有微服务中包含spring sleuth依赖项,这也是我将其创建为库的原因,因为对库的任何更改都将是所有模块的公共更改。 现在,我必须添加一个新的传播密钥,该密钥需要通过http头(如trace和spanId)传播到所有服务,为此,我从HttpTracing中提取了当前的span,并向其添加了一个ba

我有一个过滤器(OncePerRequestFilter),它基本上拦截传入的请求并记录traceId、spanId等,效果很好, 此过滤器位于一个公共模块中,该模块包含在其他项目中,以避免在我的所有微服务中包含spring sleuth依赖项,这也是我将其创建为库的原因,因为对库的任何更改都将是所有模块的公共更改。 现在,我必须添加一个新的传播密钥,该密钥需要通过http头(如trace和spanId)传播到所有服务,为此,我从HttpTracing中提取了当前的span,并向其添加了一个baggage密钥(如下所示)


我已经向application.yml(带有我的库)文件添加了传播密钥和白名单mdc密钥,如下所示

spring:
  sleuth:
    propagation-keys:
      - x-corelationId
    log:
      slf4j:
        whitelisted-mdc-keys:
          - x-corelationId
在过滤器中进行此更改后,当我使用相同的应用程序对另一个服务进行http调用时,corelationId不可用,基本上密钥不会传播

我已经阅读了文档,似乎需要添加spring.sleuth.propagation-keys,并使用spring.sleuth.log.slf4j.whitelisted-mdc-keys将它们列入白名单

是的,你需要这样做

有没有其他方法可以在公共模块中添加这些属性,这样我就不需要在每个微服务中都包含它们


是的,您可以使用Spring Cloud Config server和名为
application.yml
/
application.properties
的属性文件来设置库中所有微服务的属性。您可以实现ApplicationEnvironment PrepareEvent listener并在其中添加所需的配置 例:


当您希望以编程方式注册列入白名单的mdc密钥时,Mahmoud的答案非常有用


当您在测试中也需要这些属性时,提供额外提示,然后你可以在这篇文章中找到答案:

我已经向application.yml添加了传播密钥和白名单中的mdc密钥,但它仍然没有被传播,也不确定为什么我需要添加Sping Cloud Config服务器依赖项。请查看此提交和此应用程序以获得工作示例。至于config server,您询问了一种方法,即所有应用程序都可以设置配置,而不需要为每个应用程序单独设置配置。谢谢@Marcin,但是添加spring cloud config server依赖项和application.yml没有帮助。您不应该只添加依赖项,也不应该在应用程序端实际执行此操作。您熟悉Spring云配置的想法吗?我告诉过您如何利用SpringCloud配置,以便不需要为每个应用程序设置这些属性。请检查提供的提交和代码以了解更多信息。通过一个工作示例,您已经获得了所有必要的详细信息。谢谢,在添加spring cloud config并将我的服务指向它以获取属性之后,它就可以工作了。
spring:
  sleuth:
    propagation-keys:
      - x-corelationId
    log:
      slf4j:
        whitelisted-mdc-keys:
          - x-corelationId
@Component
public class CustomApplicationListener implements ApplicationListener<ApplicationEvent> {

    private static final Logger log = LoggerFactory.getLogger(LagortaApplicationListener.class);

    public void onApplicationEvent(ApplicationEvent event) {

        if (event instanceof ApplicationEnvironmentPreparedEvent) {
            log.debug("Custom ApplicationEnvironmentPreparedEvent Listener");
            ApplicationEnvironmentPreparedEvent envEvent = (ApplicationEnvironmentPreparedEvent) event;
            ConfigurableEnvironment env = envEvent.getEnvironment();
            Properties props = new Properties();
            props.put("spring.sleuth.propagation-keys", "x-corelationId");
            props.put("log.slf4j.whitelisted-mdc-keys:", "x-corelationId");

            env.getPropertySources().addFirst(new PropertiesPropertySource("custom", props));
        }
    }

}
public static void main(String[] args) {
        ConfigurableApplicationContext context = new SpringApplicationBuilder(MyApplication.class)
                .listeners(new CustomApplicationListener()).run();      
    }