使用@feignClient时无法获取traceId

时间:2020-06-12 16:31:02

标签: spring-cloud-sleuth openfeign

我有2个服务S1和S2。使用来自S1的带注释的Feign客户端(@FeignClient)调用S2。问题是,我无法在S2中获取traceId。

但是当我尝试使用RestTemplate调用S2时。

任何帮助将不胜感激

已编辑

我已经找到了我实际上使用Feign的原因。下面的构建器是构建fiegn客户端的示例代码。

@ConditionalOnProperty(name = "feign.hystrix.enabled")
    public Feign.Builder feignHystrixBuilder() {
        SetterFactory setterFactory = new SetterFactory() {
            @Override
            public HystrixCommand.Setter create(Target<?> target, Method method) {
                String groupKey = target.name();
                String commandKey = target.name();
                return HystrixCommand.Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey(groupKey))
                    .andCommandKey(HystrixCommandKey.Factory.asKey(commandKey));
            }
        };
        return HystrixFeign.builder().setterFactory(setterFactory);
    }

实际上是由于上述配置。不调用SleuthFeignHystrixBuilder。 我需要以我的格式设置HysterixCommandKey。这就是为什么需要上述配置。

如何与spring-sleuth一起使用?

1 个答案:

答案 0 :(得分:1)

我已经实现了Spring的BeanPostProcessor接口,然后设置了'setterFactory'。请参阅下面的示例代码

@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {

    if(bean instanceof HystrixFeign.Builder) {

        ((HystrixFeign.Builder)bean).setterFactory(new SetterFactory() {
            @Override
            public HystrixCommand.Setter create(Target<?> target, Method method) {
                String groupKey = target.name();
                String commandKey = target.name();
                return HystrixCommand.Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey(groupKey))
                    .andCommandKey(HystrixCommandKey.Factory.asKey(commandKey));
            }
        });

    }
    return BeanPostProcessor.super.postProcessAfterInitialization(bean, beanName);
}