我有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一起使用?
答案 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);
}