今天遇到个问题,在使用了seata后遇到Load balancer does not have available server for client:
结果发现是与服务中的发送了冲突
不多说了,我们直接来写方案
方案一:简单暴力,干掉zipkin(别喷我,还有方案二)
方案二:手动透传xid
首先在启动类中加如忽略
@SpringBootApplication(exclude = {SeataFeignClientAutoConfiguration.class})
在加入全局拦截传递XID
```java
import feign.RequestInterceptor;
import io.seata.core.context.RootContext;
import io.seata.spring.annotation.GlobalTransactional;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@component
@ConditionalOnClass({RequestInterceptor.class, GlobalTransactional.class})
public class SetSeataInterceptor implements RequestInterceptor {
@OverRide
public void apply(RequestTemplate template) {
String currentXid = RootContext.getXID();
if (!StringUtils.isEmpty(currentXid)) {
template.header(RootContext.KEY_XID, currentXid);
}
}
}
现在启动项目就可以正常调通了 nice
目前已经在github issues解决
[https://github.com/seata/seata/issues/2544](https://github.com/seata/seata/issues/2544)
官方建议是:Spring Cloud Sleuth默认通过TraceFeignClientAutoConfiguration提供feign的集成,
可以设置spring.sleuth.feign.enabled为false来使其无效。