package com.dianping.cat.context.context;

import com.dianping.cat.Cat;
import com.dianping.cat.context.CatConstantsExt;
import com.dianping.cat.context.CatContextImpl;
import feign.RequestInterceptor;
import feign.RequestTemplate;

/**
 * 适用于使用feign调用其他SpringCloud微服务的调用链上下文传递场景
 * 作用：在使用feign请求其他微服务时，自动生成context上下文，并将相应参数rootId、parentId、childId放入header
 * 使用方法：在需要添加catcontext的feign service接口中，@FeignClient注解添加此类的configuration配置，
 *      如：@FeignClient(name="account-manage", configuration = CatFeignConfiguration.class)
 *
 * @author soar
 * @date 2019-01-10
 */
public class CatFeignConfiguration implements RequestInterceptor {

    @Override
    public void apply(RequestTemplate requestTemplate) {

        com.dianping.cat.context.CatContextImpl catContext = new CatContextImpl();
        Cat.logRemoteCallClient(catContext,Cat.getManager().getDomain());
        requestTemplate.header(Cat.Context.ROOT,catContext.getProperty(com.dianping.cat.context.CatConstantsExt.CAT_HTTP_HEADER_ROOT_MESSAGE_ID));
        requestTemplate.header(Cat.Context.PARENT,catContext.getProperty(com.dianping.cat.context.CatConstantsExt.CAT_HTTP_HEADER_PARENT_MESSAGE_ID));
        requestTemplate.header(Cat.Context.CHILD,catContext.getProperty(CatConstantsExt.CAT_HTTP_HEADER_CHILD_MESSAGE_ID));

    }
}

@@ -895,117 +895,92 @@
 (Cat
-.
 Con
-text.ROOT,catContext.getProperty(com.dianping.cat.context.
+stantsExt.CAT_HTTP_HEADER_ROOT_MESSAGE_ID,catContext.getProperty(
 Cat
+.
 Con
-stantsExt.CAT_HTTP_HEADER_ROOT_MESSAGE_ID
+text.ROOT
 ));%0A
@@ -1017,23 +1017,54 @@
 (Cat
-.
 Con
-text.PARENT
+stantsExt.CAT_HTTP_HEADER_PARENT_MESSAGE_ID
 ,cat
@@ -1087,82 +1087,26 @@
 rty(
-com.dianping.cat.c
+Cat.C
 ontext.
-CatConstantsExt.CAT_HTTP_HEADER_PARENT_MESSAGE_ID
+PARENT
 ));%0A
@@ -1143,21 +1143,52 @@
 (Cat
-.
 Con
-text.CHIL
+stantsExt.CAT_HTTP_HEADER_CHILD_MESSAGE_I
 D,ca
@@ -1215,52 +1215,21 @@
 (Cat
+.
 Con
-stantsExt.CAT_HTTP_HEADER_CHILD_MESSAGE_I
+text.CHIL
 D));

Update CatFeignConfiguration.java