Commit b048f155 by Nepxion

修改测试用例

parent 094a34d1
...@@ -22,6 +22,7 @@ import com.netflix.loadbalancer.Server; ...@@ -22,6 +22,7 @@ import com.netflix.loadbalancer.Server;
public class MyDiscoveryEnabledAdapter implements DiscoveryEnabledAdapter { public class MyDiscoveryEnabledAdapter implements DiscoveryEnabledAdapter {
private static final Logger LOG = LoggerFactory.getLogger(MyDiscoveryEnabledAdapter.class); private static final Logger LOG = LoggerFactory.getLogger(MyDiscoveryEnabledAdapter.class);
// 根据外部传来的Header参数(例如Token),选取执行调用请求的服务实例
@Override @Override
public boolean apply(Server server, Map<String, String> metadata) { public boolean apply(Server server, Map<String, String> metadata) {
GatewayStrategyContext context = GatewayStrategyContext.getCurrentContext(); GatewayStrategyContext context = GatewayStrategyContext.getCurrentContext();
......
...@@ -28,13 +28,39 @@ public class MyDiscoveryEnabledAdapter implements DiscoveryEnabledAdapter { ...@@ -28,13 +28,39 @@ public class MyDiscoveryEnabledAdapter implements DiscoveryEnabledAdapter {
@Override @Override
public boolean apply(Server server, Map<String, String> metadata) { public boolean apply(Server server, Map<String, String> metadata) {
if (applyFromMethd(server, metadata)) { if (applyFromHeader(server, metadata)) {
return applyFromHeader(server, metadata); return applyFromMethd(server, metadata);
} else { } else {
return false; return false;
} }
} }
// 方式1,根据外部传来的Header参数(例如Token),选取执行调用请求的服务实例
private boolean applyFromHeader(Server server, Map<String, String> metadata) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (attributes == null) {
return true;
}
String token = attributes.getRequest().getHeader("token");
// String value = attributes.getRequest().getParameter("value");
String serviceId = server.getMetaInfo().getAppName().toLowerCase();
LOG.info("Serivice端负载均衡用户定制触发:serviceId={}, host={}, metadata={}, attributes={}", serviceId, server.toString(), metadata, attributes);
String filterServiceId = "discovery-springcloud-example-c";
String filterToken = "123";
if (StringUtils.equals(serviceId, filterServiceId) && StringUtils.isNotEmpty(token) && token.contains(filterToken)) {
LOG.info("过滤条件:当serviceId={} && Token含有'{}'的时候,不能被Ribbon负载均衡到", filterToken);
return false;
}
return true;
}
// 方式2,根据下游服务传来的方法参数(例如接口名、方法名、参数名或参数值等),选取执行调用请求的服务实例
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private boolean applyFromMethd(Server server, Map<String, String> metadata) { private boolean applyFromMethd(Server server, Map<String, String> metadata) {
ServiceStrategyContext context = ServiceStrategyContext.getCurrentContext(); ServiceStrategyContext context = ServiceStrategyContext.getCurrentContext();
...@@ -45,7 +71,7 @@ public class MyDiscoveryEnabledAdapter implements DiscoveryEnabledAdapter { ...@@ -45,7 +71,7 @@ public class MyDiscoveryEnabledAdapter implements DiscoveryEnabledAdapter {
LOG.info("Serivice端负载均衡用户定制触发:serviceId={}, host={}, metadata={}, context={}", serviceId, server.toString(), metadata, context); LOG.info("Serivice端负载均衡用户定制触发:serviceId={}, host={}, metadata={}, context={}", serviceId, server.toString(), metadata, context);
String filterServiceId = "discovery-springcloud-example-c"; String filterServiceId = "discovery-springcloud-example-b";
String filterVersion = "1.0"; String filterVersion = "1.0";
String filterBusinessValue = "abc"; String filterBusinessValue = "abc";
if (StringUtils.equals(serviceId, filterServiceId) && StringUtils.equals(version, filterVersion)) { if (StringUtils.equals(serviceId, filterServiceId) && StringUtils.equals(version, filterVersion)) {
...@@ -62,27 +88,4 @@ public class MyDiscoveryEnabledAdapter implements DiscoveryEnabledAdapter { ...@@ -62,27 +88,4 @@ public class MyDiscoveryEnabledAdapter implements DiscoveryEnabledAdapter {
return true; return true;
} }
private boolean applyFromHeader(Server server, Map<String, String> metadata) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (attributes == null) {
return true;
}
String token = attributes.getRequest().getHeader("token");
// String value = attributes.getRequest().getParameter("value");
String serviceId = server.getMetaInfo().getAppName().toLowerCase();
LOG.info("Serivice端负载均衡用户定制触发:serviceId={}, host={}, metadata={}, attributes={}", serviceId, server.toString(), metadata, attributes);
String filterToken = "123";
if (StringUtils.isNotEmpty(token) && token.contains(filterToken)) {
LOG.info("过滤条件:当Token含有'{}'的时候,不能被Ribbon负载均衡到", filterToken);
return false;
}
return true;
}
} }
\ No newline at end of file
...@@ -22,6 +22,7 @@ import com.netflix.zuul.context.RequestContext; ...@@ -22,6 +22,7 @@ import com.netflix.zuul.context.RequestContext;
public class MyDiscoveryEnabledAdapter implements DiscoveryEnabledAdapter { public class MyDiscoveryEnabledAdapter implements DiscoveryEnabledAdapter {
private static final Logger LOG = LoggerFactory.getLogger(MyDiscoveryEnabledAdapter.class); private static final Logger LOG = LoggerFactory.getLogger(MyDiscoveryEnabledAdapter.class);
// 根据外部传来的Header参数(例如Token),选取执行调用请求的服务实例
@Override @Override
public boolean apply(Server server, Map<String, String> metadata) { public boolean apply(Server server, Map<String, String> metadata) {
RequestContext context = RequestContext.getCurrentContext(); RequestContext context = RequestContext.getCurrentContext();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment