mirror of
https://gitee.com/mirrors/Spring-Cloud-Alibaba.git
synced 2021-06-26 13:25:11 +08:00
fix loadbalance feignclient seata info
This commit is contained in:
parent
24c8ddee8b
commit
4626e229dd
@ -35,49 +35,44 @@ import org.springframework.util.StringUtils;
|
|||||||
*/
|
*/
|
||||||
public class SeataFeignClient implements Client {
|
public class SeataFeignClient implements Client {
|
||||||
|
|
||||||
private final Client delegate;
|
private final Client delegate;
|
||||||
private final BeanFactory beanFactory;
|
private final BeanFactory beanFactory;
|
||||||
private static final int MAP_SIZE = 16;
|
private static final int MAP_SIZE = 16;
|
||||||
|
|
||||||
SeataFeignClient(BeanFactory beanFactory) {
|
SeataFeignClient(BeanFactory beanFactory) {
|
||||||
this.beanFactory = beanFactory;
|
this.beanFactory = beanFactory;
|
||||||
this.delegate = new Client.Default(null, null);
|
this.delegate = new Client.Default(null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
SeataFeignClient(BeanFactory beanFactory, Client delegate) {
|
SeataFeignClient(BeanFactory beanFactory, Client delegate) {
|
||||||
this.delegate = delegate;
|
this.delegate = delegate;
|
||||||
this.beanFactory = beanFactory;
|
this.beanFactory = beanFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Response execute(Request request, Request.Options options) throws IOException {
|
public Response execute(Request request, Request.Options options) throws IOException {
|
||||||
|
|
||||||
Request modifiedRequest = getModifyRequest(request);
|
Request modifiedRequest = getModifyRequest(request);
|
||||||
|
return this.delegate.execute(modifiedRequest, options);
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
private Request getModifyRequest(Request request) {
|
||||||
return this.delegate.execute(modifiedRequest, options);
|
|
||||||
} finally {
|
|
||||||
|
|
||||||
}
|
String xid = RootContext.getXID();
|
||||||
}
|
|
||||||
|
|
||||||
private Request getModifyRequest(Request request) {
|
if (StringUtils.isEmpty(xid)) {
|
||||||
|
return request;
|
||||||
|
}
|
||||||
|
|
||||||
String xid = RootContext.getXID();
|
Map<String, Collection<String>> headers = new HashMap<>(MAP_SIZE);
|
||||||
|
headers.putAll(request.headers());
|
||||||
|
|
||||||
if (StringUtils.isEmpty(xid)) {
|
List<String> fescarXid = new ArrayList<>();
|
||||||
return request;
|
fescarXid.add(xid);
|
||||||
}
|
headers.put(RootContext.KEY_XID, fescarXid);
|
||||||
|
|
||||||
Map<String, Collection<String>> headers = new HashMap<>(MAP_SIZE);
|
return Request.create(request.method(), request.url(), headers, request.body(),
|
||||||
headers.putAll(request.headers());
|
request.charset());
|
||||||
|
}
|
||||||
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());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
@ -65,7 +65,7 @@ public class SeataFeignClientAutoConfiguration {
|
|||||||
protected static class FeignBeanPostProcessorConfiguration {
|
protected static class FeignBeanPostProcessorConfiguration {
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
SeataBeanPostProcessor seataBeanPostProcessor(
|
SeataBeanPostProcessor seataBeanPostProcessor(
|
||||||
SeataFeignObjectWrapper seataFeignObjectWrapper) {
|
SeataFeignObjectWrapper seataFeignObjectWrapper) {
|
||||||
return new SeataBeanPostProcessor(seataFeignObjectWrapper);
|
return new SeataBeanPostProcessor(seataFeignObjectWrapper);
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@ public class SeataFeignContext extends FeignContext {
|
|||||||
private final FeignContext delegate;
|
private final FeignContext delegate;
|
||||||
|
|
||||||
SeataFeignContext(SeataFeignObjectWrapper seataFeignObjectWrapper,
|
SeataFeignContext(SeataFeignObjectWrapper seataFeignObjectWrapper,
|
||||||
FeignContext delegate) {
|
FeignContext delegate) {
|
||||||
this.seataFeignObjectWrapper = seataFeignObjectWrapper;
|
this.seataFeignObjectWrapper = seataFeignObjectWrapper;
|
||||||
this.delegate = delegate;
|
this.delegate = delegate;
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,13 @@
|
|||||||
package org.springframework.cloud.alibaba.seata.feign;
|
package org.springframework.cloud.alibaba.seata.feign;
|
||||||
|
|
||||||
import java.io.IOException;
|
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 io.seata.core.context.RootContext;
|
||||||
import org.springframework.beans.factory.BeanFactory;
|
import org.springframework.beans.factory.BeanFactory;
|
||||||
import org.springframework.cloud.netflix.ribbon.SpringClientFactory;
|
import org.springframework.cloud.netflix.ribbon.SpringClientFactory;
|
||||||
|
|
||||||
@ -26,23 +32,27 @@ import feign.Request;
|
|||||||
import feign.Response;
|
import feign.Response;
|
||||||
import org.springframework.cloud.openfeign.ribbon.CachingSpringLoadBalancerFactory;
|
import org.springframework.cloud.openfeign.ribbon.CachingSpringLoadBalancerFactory;
|
||||||
import org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient;
|
import org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author xiaojing
|
* @author xiaojing
|
||||||
*/
|
*/
|
||||||
public class SeataLoadBalancerFeignClient extends LoadBalancerFeignClient {
|
public class SeataLoadBalancerFeignClient extends LoadBalancerFeignClient {
|
||||||
|
|
||||||
|
private static final int MAP_SIZE = 16;
|
||||||
|
|
||||||
private final BeanFactory beanFactory;
|
private final BeanFactory beanFactory;
|
||||||
|
|
||||||
SeataLoadBalancerFeignClient(Client delegate,
|
SeataLoadBalancerFeignClient(Client delegate,
|
||||||
CachingSpringLoadBalancerFactory lbClientFactory,
|
CachingSpringLoadBalancerFactory lbClientFactory,
|
||||||
SpringClientFactory clientFactory, BeanFactory beanFactory) {
|
SpringClientFactory clientFactory, BeanFactory beanFactory) {
|
||||||
super(wrap(delegate, beanFactory), lbClientFactory, clientFactory);
|
super(wrap(delegate, beanFactory), lbClientFactory, clientFactory);
|
||||||
this.beanFactory = beanFactory;
|
this.beanFactory = beanFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Response execute(Request request, Request.Options options) throws IOException {
|
public Response execute(Request request, Request.Options options) throws IOException {
|
||||||
|
Request modifiedRequest = getModifyRequest(request);
|
||||||
return super.execute(request, options);
|
return super.execute(request, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,4 +60,22 @@ public class SeataLoadBalancerFeignClient extends LoadBalancerFeignClient {
|
|||||||
return (Client) new SeataFeignObjectWrapper(beanFactory).wrap(delegate);
|
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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user