1
0
mirror of https://gitee.com/mirrors/Spring-Cloud-Alibaba.git synced 2021-06-26 13:25:11 +08:00

edgware seata feigncliet sync

This commit is contained in:
fangjian0423 2019-07-31 11:30:05 +08:00
parent 9e759e05b5
commit 1ad2b08c11
2 changed files with 30 additions and 8 deletions

View File

@ -54,13 +54,7 @@ public class SeataFeignClient implements Client {
public Response execute(Request request, Request.Options options) throws IOException {
Request modifiedRequest = getModifyRequest(request);
try {
return this.delegate.execute(modifiedRequest, options);
}
finally {
}
return this.delegate.execute(modifiedRequest, options);
}
private Request getModifyRequest(Request request) {

View File

@ -17,21 +17,30 @@
package com.alibaba.cloud.seata.feign;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.cloud.netflix.feign.ribbon.CachingSpringLoadBalancerFactory;
import org.springframework.cloud.netflix.feign.ribbon.LoadBalancerFeignClient;
import org.springframework.cloud.netflix.ribbon.SpringClientFactory;
import org.springframework.util.StringUtils;
import feign.Client;
import feign.Request;
import feign.Response;
import io.seata.core.context.RootContext;
/**
* @author xiaojing
*/
public class SeataLoadBalancerFeignClient extends LoadBalancerFeignClient {
private static final int MAP_SIZE = 16;
private final BeanFactory beanFactory;
SeataLoadBalancerFeignClient(Client delegate,
@ -43,11 +52,30 @@ public class SeataLoadBalancerFeignClient extends LoadBalancerFeignClient {
@Override
public Response execute(Request request, Request.Options options) throws IOException {
return super.execute(request, options);
Request modifiedRequest = getModifyRequest(request);
return super.execute(modifiedRequest, options);
}
private static Client wrap(Client delegate, BeanFactory beanFactory) {
return (Client) new SeataFeignObjectWrapper(beanFactory).wrap(delegate);
}
private Request getModifyRequest(Request request) {
String xid = RootContext.getXID();
if (StringUtils.isEmpty(xid)) {
return request;
}
Map<String, Collection<String>> headers = new HashMap<>(MAP_SIZE);
headers.putAll(request.headers());
List<String> fescarXid = new ArrayList<>();
fescarXid.add(xid);
headers.put(RootContext.KEY_XID, fescarXid);
return Request.create(request.method(), request.url(), headers, request.body(),
request.charset());
}
}