Commit cca8b7e8 by Nepxion

优化自定义策略的接口

parent 57956175
......@@ -31,27 +31,27 @@ public abstract class AbstractDiscoveryEnabledAdapter implements DiscoveryEnable
protected PluginAdapter pluginAdapter;
@Override
public boolean apply(Server server, Map<String, String> metadata) {
boolean enabled = applyVersion(server, metadata);
public boolean apply(Server server) {
boolean enabled = applyVersion(server);
if (!enabled) {
return false;
}
enabled = applyRegion(server, metadata);
enabled = applyRegion(server);
if (!enabled) {
return false;
}
enabled = applyAddress(server, metadata);
enabled = applyAddress(server);
if (!enabled) {
return false;
}
return applyStrategy(server, metadata);
return applyStrategy(server);
}
@SuppressWarnings("unchecked")
private boolean applyVersion(Server server, Map<String, String> metadata) {
private boolean applyVersion(Server server) {
String versionValue = getVersionValue(server);
if (StringUtils.isEmpty(versionValue)) {
RuleEntity ruleEntity = pluginAdapter.getRule();
......@@ -67,6 +67,7 @@ public abstract class AbstractDiscoveryEnabledAdapter implements DiscoveryEnable
return true;
}
Map<String, String> metadata = pluginAdapter.getServerMetadata(server);
String version = metadata.get(DiscoveryConstant.VERSION);
if (StringUtils.isEmpty(version)) {
return false;
......@@ -94,7 +95,7 @@ public abstract class AbstractDiscoveryEnabledAdapter implements DiscoveryEnable
}
@SuppressWarnings("unchecked")
private boolean applyRegion(Server server, Map<String, String> metadata) {
private boolean applyRegion(Server server) {
String regionValue = getRegionValue(server);
if (StringUtils.isEmpty(regionValue)) {
RuleEntity ruleEntity = pluginAdapter.getRule();
......@@ -110,6 +111,7 @@ public abstract class AbstractDiscoveryEnabledAdapter implements DiscoveryEnable
return true;
}
Map<String, String> metadata = pluginAdapter.getServerMetadata(server);
String region = metadata.get(DiscoveryConstant.REGION);
if (StringUtils.isEmpty(region)) {
return false;
......@@ -137,7 +139,7 @@ public abstract class AbstractDiscoveryEnabledAdapter implements DiscoveryEnable
}
@SuppressWarnings("unchecked")
private boolean applyAddress(Server server, Map<String, String> metadata) {
private boolean applyAddress(Server server) {
String addressValue = getAddressValue(server);
if (StringUtils.isEmpty(addressValue)) {
RuleEntity ruleEntity = pluginAdapter.getRule();
......@@ -168,12 +170,12 @@ public abstract class AbstractDiscoveryEnabledAdapter implements DiscoveryEnable
return false;
}
private boolean applyStrategy(Server server, Map<String, String> metadata) {
private boolean applyStrategy(Server server) {
if (discoveryEnabledStrategy == null) {
return true;
}
return discoveryEnabledStrategy.apply(server, metadata);
return discoveryEnabledStrategy.apply(server);
}
protected abstract String getVersionValue(Server server);
......
......@@ -9,10 +9,8 @@ package com.nepxion.discovery.plugin.strategy.adapter;
* @version 1.0
*/
import java.util.Map;
import com.netflix.loadbalancer.Server;
public interface DiscoveryEnabledAdapter {
boolean apply(Server server, Map<String, String> metadata);
boolean apply(Server server);
}
\ No newline at end of file
......@@ -9,10 +9,8 @@ package com.nepxion.discovery.plugin.strategy.adapter;
* @version 1.0
*/
import java.util.Map;
import com.netflix.loadbalancer.Server;
public interface DiscoveryEnabledStrategy {
boolean apply(Server server, Map<String, String> metadata);
boolean apply(Server server);
}
\ No newline at end of file
......@@ -9,8 +9,6 @@ package com.nepxion.discovery.plugin.strategy.rule;
* @version 1.0
*/
import java.util.Map;
import com.nepxion.discovery.plugin.framework.adapter.PluginAdapter;
import com.nepxion.discovery.plugin.strategy.adapter.DiscoveryEnabledAdapter;
import com.netflix.loadbalancer.AbstractServerPredicate;
......@@ -31,9 +29,7 @@ public class DiscoveryEnabledBasePredicate extends AbstractServerPredicate {
return true;
}
Map<String, String> metadata = pluginAdapter.getServerMetadata(server);
return discoveryEnabledAdapter.apply(server, metadata);
return discoveryEnabledAdapter.apply(server);
}
public void setPluginAdapter(PluginAdapter pluginAdapter) {
......
......@@ -9,8 +9,6 @@ package com.nepxion.discovery.plugin.strategy.rule;
* @version 1.0
*/
import java.util.Map;
import com.nepxion.discovery.plugin.framework.adapter.PluginAdapter;
import com.nepxion.discovery.plugin.strategy.adapter.DiscoveryEnabledAdapter;
import com.netflix.client.config.IClientConfig;
......@@ -47,9 +45,7 @@ public class DiscoveryEnabledZoneAvoidancePredicate extends ZoneAvoidancePredica
return true;
}
Map<String, String> metadata = pluginAdapter.getServerMetadata(server);
return discoveryEnabledAdapter.apply(server, metadata);
return discoveryEnabledAdapter.apply(server);
}
public void setPluginAdapter(PluginAdapter pluginAdapter) {
......
......@@ -9,8 +9,6 @@ package com.nepxion.discovery.plugin.example.gateway.impl;
* @version 1.0
*/
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -33,18 +31,18 @@ public class MyDiscoveryEnabledStrategy implements DiscoveryEnabledStrategy {
private PluginAdapter pluginAdapter;
@Override
public boolean apply(Server server, Map<String, String> metadata) {
public boolean apply(Server server) {
// 对Rest调用传来的Header参数(例如:mobile)做策略
return applyFromHeader(server, metadata);
return applyFromHeader(server);
}
// 根据Rest调用传来的Header参数(例如:mobile),选取执行调用请求的服务实例
private boolean applyFromHeader(Server server, Map<String, String> metadata) {
private boolean applyFromHeader(Server server) {
String mobile = gatewayStrategyContextHolder.getHeader("mobile");
String version = metadata.get(DiscoveryConstant.VERSION);
String serviceId = pluginAdapter.getServerServiceId(server);
String version = pluginAdapter.getServerMetadata(server).get(DiscoveryConstant.VERSION);
LOG.info("Gateway端负载均衡用户定制触发:mobile={}, serviceId={}, metadata={}", mobile, serviceId, metadata);
LOG.info("Gateway端负载均衡用户定制触发:mobile={}, serviceId={}, version={}", mobile, serviceId, version);
if (StringUtils.isNotEmpty(mobile)) {
// 手机号以移动138开头,路由到1.0版本的服务上
......
......@@ -34,23 +34,24 @@ public class MyDiscoveryEnabledStrategy implements DiscoveryEnabledStrategy {
private PluginAdapter pluginAdapter;
@Override
public boolean apply(Server server, Map<String, String> metadata) {
public boolean apply(Server server) {
// 对Rest调用传来的Header参数(例如:token)做策略
boolean enabled = applyFromHeader(server, metadata);
boolean enabled = applyFromHeader(server);
if (!enabled) {
return false;
}
// 对RPC调用传来的方法参数做策略
return applyFromMethod(server, metadata);
return applyFromMethod(server);
}
// 根据Rest调用传来的Header参数(例如:token),选取执行调用请求的服务实例
private boolean applyFromHeader(Server server, Map<String, String> metadata) {
private boolean applyFromHeader(Server server) {
String token = serviceStrategyContextHolder.getHeader("token");
String serviceId = pluginAdapter.getServerServiceId(server);
String version = pluginAdapter.getServerMetadata(server).get(DiscoveryConstant.VERSION);
LOG.info("Service端负载均衡用户定制触发:token={}, serviceId={}, metadata={}", token, serviceId, metadata);
LOG.info("Service端负载均衡用户定制触发:token={}, serviceId={}, version={}", token, serviceId, version);
String filterServiceId = "discovery-springcloud-example-c";
String filterToken = "123";
......@@ -65,13 +66,12 @@ public class MyDiscoveryEnabledStrategy implements DiscoveryEnabledStrategy {
// 根据RPC调用传来的方法参数(例如接口名、方法名、参数名或参数值等),选取执行调用请求的服务实例
@SuppressWarnings("unchecked")
private boolean applyFromMethod(Server server, Map<String, String> metadata) {
private boolean applyFromMethod(Server server) {
Map<String, Object> attributes = serviceStrategyContextHolder.getRpcAttributes();
String serviceId = pluginAdapter.getServerServiceId(server);
String version = metadata.get(DiscoveryConstant.VERSION);
String version = pluginAdapter.getServerMetadata(server).get(DiscoveryConstant.VERSION);
LOG.info("Serivice端负载均衡用户定制触发:attributes={}, serviceId={}, metadata={}", attributes, serviceId, metadata);
LOG.info("Serivice端负载均衡用户定制触发:attributes={}, serviceId={}, version={}", attributes, serviceId, version);
String filterServiceId = "discovery-springcloud-example-b";
String filterVersion = "1.0";
......
......@@ -9,8 +9,6 @@ package com.nepxion.discovery.plugin.example.zuul.impl;
* @version 1.0
*/
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -33,18 +31,18 @@ public class MyDiscoveryEnabledStrategy implements DiscoveryEnabledStrategy {
private PluginAdapter pluginAdapter;
@Override
public boolean apply(Server server, Map<String, String> metadata) {
public boolean apply(Server server) {
// 对Rest调用传来的Header参数(例如:mobile)做策略
return applyFromHeader(server, metadata);
return applyFromHeader(server);
}
// 根据Rest调用传来的Header参数(例如:mobile),选取执行调用请求的服务实例
private boolean applyFromHeader(Server server, Map<String, String> metadata) {
private boolean applyFromHeader(Server server) {
String mobile = zuulStrategyContextHolder.getHeader("mobile");
String version = metadata.get(DiscoveryConstant.VERSION);
String serviceId = pluginAdapter.getServerServiceId(server);
String version = pluginAdapter.getServerMetadata(server).get(DiscoveryConstant.VERSION);
LOG.info("Zuul端负载均衡用户定制触发:mobile={}, serviceId={}, metadata={}", mobile, serviceId, metadata);
LOG.info("Zuul端负载均衡用户定制触发:mobile={}, serviceId={}, version={}", mobile, serviceId, version);
if (StringUtils.isNotEmpty(mobile)) {
// 手机号以移动138开头,路由到1.0版本的服务上
......
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