Commit 27ea9f0f by Neptune Committed by Nepxion

为listener增加优先级机制

parents 386b8178 5b8c9c81
......@@ -11,14 +11,20 @@ package com.nepxion.discovery.plugin.framework.listener.discovery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.core.Ordered;
import com.nepxion.discovery.plugin.framework.listener.BasicListener;
public abstract class AbstractDiscoveryListener extends BasicListener implements DiscoveryListener {
public abstract class AbstractDiscoveryListener extends BasicListener implements DiscoveryListener, Ordered {
@Autowired
protected DiscoveryClient discoveryClient;
public DiscoveryClient getDiscoveryClient() {
return discoveryClient;
}
@Override
public int getOrder() {
return 0;
}
}
\ No newline at end of file
......@@ -17,33 +17,17 @@ import org.springframework.cloud.client.ServiceInstance;
// 因为内置监听触发的时候,需要优先过滤,所以顺序执行
public class DiscoveryListenerExecutor {
@Autowired
private HostFilterDiscoveryListener hostFilterDiscoveryListener;
@Autowired
private VersionFilterDiscoveryListener versionFilterDiscoveryListener;
@Autowired
private List<DiscoveryListener> discoveryListenerList;
public void onGetInstances(String serviceId, List<ServiceInstance> instances) {
hostFilterDiscoveryListener.onGetInstances(serviceId, instances);
versionFilterDiscoveryListener.onGetInstances(serviceId, instances);
for (DiscoveryListener discoveryListener : discoveryListenerList) {
if (discoveryListener != hostFilterDiscoveryListener && discoveryListener != versionFilterDiscoveryListener) {
discoveryListener.onGetInstances(serviceId, instances);
}
discoveryListener.onGetInstances(serviceId, instances);
}
}
public void onGetServices(List<String> services) {
hostFilterDiscoveryListener.onGetServices(services);
versionFilterDiscoveryListener.onGetServices(services);
for (DiscoveryListener discoveryListener : discoveryListenerList) {
if (discoveryListener != hostFilterDiscoveryListener && discoveryListener != versionFilterDiscoveryListener) {
discoveryListener.onGetServices(services);
}
discoveryListener.onGetServices(services);
}
}
}
\ No newline at end of file
......@@ -16,6 +16,7 @@ import java.util.Map;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.core.Ordered;
import com.nepxion.discovery.common.entity.DiscoveryEntity;
import com.nepxion.discovery.common.entity.FilterType;
......@@ -108,4 +109,10 @@ public class HostFilterDiscoveryListener extends AbstractDiscoveryListener {
public void onGetServices(List<String> services) {
}
@Override
public int getOrder() {
// Highest priority
return Ordered.HIGHEST_PRECEDENCE;
}
}
\ No newline at end of file
......@@ -18,11 +18,12 @@ import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.core.Ordered;
import com.nepxion.discovery.common.constant.DiscoveryConstant;
import com.nepxion.discovery.common.entity.DiscoveryEntity;
import com.nepxion.discovery.common.entity.VersionEntity;
import com.nepxion.discovery.common.entity.RuleEntity;
import com.nepxion.discovery.common.entity.VersionEntity;
import com.nepxion.discovery.common.entity.VersionFilterEntity;
public class VersionFilterDiscoveryListener extends AbstractDiscoveryListener {
......@@ -125,4 +126,10 @@ public class VersionFilterDiscoveryListener extends AbstractDiscoveryListener {
public void onGetServices(List<String> services) {
}
@Override
public int getOrder() {
// After host filter
return Ordered.HIGHEST_PRECEDENCE + 1;
}
}
\ No newline at end of file
......@@ -9,8 +9,13 @@ package com.nepxion.discovery.plugin.framework.listener.loadbalance;
* @version 1.0
*/
import com.nepxion.discovery.plugin.framework.listener.BasicListener;
import org.springframework.core.Ordered;
public abstract class AbstractLoadBalanceListener extends BasicListener implements LoadBalanceListener {
import com.nepxion.discovery.plugin.framework.listener.BasicListener;
public abstract class AbstractLoadBalanceListener extends BasicListener implements LoadBalanceListener, Ordered {
@Override
public int getOrder() {
return 0;
}
}
\ No newline at end of file
......@@ -15,6 +15,7 @@ import java.util.List;
import java.util.Map;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.core.Ordered;
import com.nepxion.discovery.common.entity.DiscoveryEntity;
import com.nepxion.discovery.common.entity.FilterType;
......@@ -103,4 +104,10 @@ public class HostFilterLoadBalanceListener extends AbstractLoadBalanceListener {
return matched;
}
@Override
public int getOrder() {
// Highest priority
return Ordered.HIGHEST_PRECEDENCE;
}
}
\ No newline at end of file
......@@ -19,24 +19,13 @@ import com.netflix.loadbalancer.ZoneAwareLoadBalancer;
// 因为内置监听触发的时候,需要优先过滤,所以顺序执行
public class LoadBalanceListenerExecutor {
@Autowired
private HostFilterLoadBalanceListener hostFilterLoadBalanceListener;
@Autowired
private VersionFilterLoadBalanceListener versionFilterLoadBalanceListener;
@Autowired
private List<LoadBalanceListener> loadBalanceListenerList;
private ZoneAwareLoadBalancer<?> loadBalancer;
public void onGetServers(String serviceId, List<? extends Server> servers) {
hostFilterLoadBalanceListener.onGetServers(serviceId, servers);
versionFilterLoadBalanceListener.onGetServers(serviceId, servers);
for (LoadBalanceListener loadBalanceListener : loadBalanceListenerList) {
if (loadBalanceListener != hostFilterLoadBalanceListener && loadBalanceListener != versionFilterLoadBalanceListener) {
loadBalanceListener.onGetServers(serviceId, servers);
}
loadBalanceListener.onGetServers(serviceId, servers);
}
}
......
......@@ -17,10 +17,11 @@ import java.util.Map;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.core.Ordered;
import com.nepxion.discovery.common.entity.DiscoveryEntity;
import com.nepxion.discovery.common.entity.VersionEntity;
import com.nepxion.discovery.common.entity.RuleEntity;
import com.nepxion.discovery.common.entity.VersionEntity;
import com.nepxion.discovery.common.entity.VersionFilterEntity;
import com.netflix.loadbalancer.Server;
......@@ -119,4 +120,10 @@ public class VersionFilterLoadBalanceListener extends AbstractLoadBalanceListene
}
}
}
@Override
public int getOrder() {
// After host filter
return Ordered.HIGHEST_PRECEDENCE + 1;
}
}
\ No newline at end of file
......@@ -11,14 +11,20 @@ package com.nepxion.discovery.plugin.framework.listener.register;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.serviceregistry.ServiceRegistry;
import org.springframework.core.Ordered;
import com.nepxion.discovery.plugin.framework.listener.BasicListener;
public abstract class AbstractRegisterListener extends BasicListener implements RegisterListener {
public abstract class AbstractRegisterListener extends BasicListener implements RegisterListener, Ordered {
@Autowired
protected ServiceRegistry<?> serviceRegistry;
public ServiceRegistry<?> getServiceRegistry() {
return serviceRegistry;
}
@Override
public int getOrder() {
return 0;
}
}
\ No newline at end of file
......@@ -13,6 +13,7 @@ import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.serviceregistry.Registration;
import org.springframework.core.Ordered;
import com.nepxion.discovery.common.constant.DiscoveryConstant;
import com.nepxion.discovery.common.entity.CountFilterEntity;
......@@ -95,4 +96,10 @@ public class CountFilterRegisterListener extends AbstractRegisterListener {
public void onClose() {
}
@Override
public int getOrder() {
// Before host filter
return Ordered.LOWEST_PRECEDENCE - 1;
}
}
\ No newline at end of file
......@@ -15,6 +15,7 @@ import java.util.Map;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.cloud.client.serviceregistry.Registration;
import org.springframework.core.Ordered;
import com.nepxion.discovery.common.entity.FilterType;
import com.nepxion.discovery.common.entity.HostFilterEntity;
......@@ -122,4 +123,10 @@ public class HostFilterRegisterListener extends AbstractRegisterListener {
public void onClose() {
}
@Override
public int getOrder() {
// Lowest priority
return Ordered.LOWEST_PRECEDENCE;
}
}
\ No newline at end of file
......@@ -17,55 +17,30 @@ import org.springframework.cloud.client.serviceregistry.Registration;
// 因为内置监听触发的时候,会抛异常处理,所以逆序执行
public class RegisterListenerExecutor {
@Autowired
private CountFilterRegisterListener countFilterRegisterListener;
@Autowired
private HostFilterRegisterListener hostFilterRegisterListener;
@Autowired
private List<RegisterListener> registerListenerList;
public void onRegister(Registration registration) {
for (RegisterListener registerListener : registerListenerList) {
if (registerListener != countFilterRegisterListener && registerListener != hostFilterRegisterListener) {
registerListener.onRegister(registration);
}
registerListener.onRegister(registration);
}
countFilterRegisterListener.onRegister(registration);
hostFilterRegisterListener.onRegister(registration);
}
public void onDeregister(Registration registration) {
for (RegisterListener registerListener : registerListenerList) {
if (registerListener != countFilterRegisterListener && registerListener != hostFilterRegisterListener) {
registerListener.onDeregister(registration);
}
}
registerListener.onDeregister(registration);
countFilterRegisterListener.onDeregister(registration);
hostFilterRegisterListener.onDeregister(registration);
}
}
public void onSetStatus(Registration registration, String status) {
for (RegisterListener registerListener : registerListenerList) {
if (registerListener != countFilterRegisterListener && registerListener != hostFilterRegisterListener) {
registerListener.onSetStatus(registration, status);
}
registerListener.onSetStatus(registration, status);
}
countFilterRegisterListener.onSetStatus(registration, status);
hostFilterRegisterListener.onSetStatus(registration, status);
}
public void onClose() {
for (RegisterListener registerListener : registerListenerList) {
if (registerListener != countFilterRegisterListener && registerListener != hostFilterRegisterListener) {
registerListener.onClose();
}
registerListener.onClose();
}
countFilterRegisterListener.onClose();
hostFilterRegisterListener.onClose();
}
}
\ No newline at end of file
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