Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
discovery
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
陈文顺
discovery
Commits
5d6c43fa
Commit
5d6c43fa
authored
Jul 13, 2018
by
Nepxion
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
不仅支持ipAddress过滤,也支持hostName过滤
parent
d034238f
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
107 additions
and
105 deletions
+107
-105
discovery-plugin-config-center/src/main/java/com/nepxion/discovery/plugin/configcenter/ConfigParser.java
+13
-13
discovery-plugin-framework/src/main/java/com/nepxion/discovery/plugin/framework/configuration/PluginAutoConfiguration.java
+9
-9
discovery-plugin-framework/src/main/java/com/nepxion/discovery/plugin/framework/entity/FilterHolderEntity.java
+5
-5
discovery-plugin-framework/src/main/java/com/nepxion/discovery/plugin/framework/entity/HostFilterEntity.java
+2
-2
discovery-plugin-framework/src/main/java/com/nepxion/discovery/plugin/framework/event/RegisterFailureEvent.java
+5
-5
discovery-plugin-framework/src/main/java/com/nepxion/discovery/plugin/framework/listener/discovery/DiscoveryListenerExecutor.java
+5
-5
discovery-plugin-framework/src/main/java/com/nepxion/discovery/plugin/framework/listener/discovery/HostFilterDiscoveryListener.java
+13
-13
discovery-plugin-framework/src/main/java/com/nepxion/discovery/plugin/framework/listener/loadbalance/HostFilterLoadBalanceListener.java
+13
-13
discovery-plugin-framework/src/main/java/com/nepxion/discovery/plugin/framework/listener/loadbalance/LoadBalanceListenerExecutor.java
+2
-2
discovery-plugin-framework/src/main/java/com/nepxion/discovery/plugin/framework/listener/register/CountFilterRegisterListener.java
+7
-7
discovery-plugin-framework/src/main/java/com/nepxion/discovery/plugin/framework/listener/register/HostFilterRegisterListener.java
+21
-21
discovery-plugin-framework/src/main/java/com/nepxion/discovery/plugin/framework/listener/register/RegisterListenerExecutor.java
+10
-9
discovery-springcloud-example/src/main/java/com/nepxion/discovery/plugin/example/extension/MySubscriber.java
+2
-1
No files found.
discovery-plugin-config-center/src/main/java/com/nepxion/discovery/plugin/configcenter/ConfigParser.java
View file @
5d6c43fa
...
...
@@ -34,7 +34,7 @@ import com.nepxion.discovery.plugin.framework.entity.DiscoveryEntity;
import
com.nepxion.discovery.plugin.framework.entity.DiscoveryServiceEntity
;
import
com.nepxion.discovery.plugin.framework.entity.FilterHolderEntity
;
import
com.nepxion.discovery.plugin.framework.entity.FilterType
;
import
com.nepxion.discovery.plugin.framework.entity.
IpAddress
FilterEntity
;
import
com.nepxion.discovery.plugin.framework.entity.
Host
FilterEntity
;
import
com.nepxion.discovery.plugin.framework.entity.RegisterEntity
;
import
com.nepxion.discovery.plugin.framework.entity.RuleEntity
;
import
com.nepxion.discovery.plugin.framework.entity.VersionFilterEntity
;
...
...
@@ -115,9 +115,9 @@ public class ConfigParser extends Dom4JParser implements PluginConfigParser {
Element
childElement
=
(
Element
)
childElementObject
;
if
(
StringUtils
.
equals
(
childElement
.
getName
(),
ConfigConstant
.
BLACKLIST_ELEMENT_NAME
))
{
parse
IpAddress
Filter
(
childElement
,
ConfigConstant
.
BLACKLIST_ELEMENT_NAME
,
registerEntity
);
parse
Host
Filter
(
childElement
,
ConfigConstant
.
BLACKLIST_ELEMENT_NAME
,
registerEntity
);
}
else
if
(
StringUtils
.
equals
(
childElement
.
getName
(),
ConfigConstant
.
WHITELIST_ELEMENT_NAME
))
{
parse
IpAddress
Filter
(
childElement
,
ConfigConstant
.
WHITELIST_ELEMENT_NAME
,
registerEntity
);
parse
Host
Filter
(
childElement
,
ConfigConstant
.
WHITELIST_ELEMENT_NAME
,
registerEntity
);
}
else
if
(
StringUtils
.
equals
(
childElement
.
getName
(),
ConfigConstant
.
COUNT_ELEMENT_NAME
))
{
parseCountFilter
(
childElement
,
registerEntity
);
}
...
...
@@ -133,9 +133,9 @@ public class ConfigParser extends Dom4JParser implements PluginConfigParser {
Element
childElement
=
(
Element
)
childElementObject
;
if
(
StringUtils
.
equals
(
childElement
.
getName
(),
ConfigConstant
.
BLACKLIST_ELEMENT_NAME
))
{
parse
IpAddress
Filter
(
childElement
,
ConfigConstant
.
BLACKLIST_ELEMENT_NAME
,
discoveryEntity
);
parse
Host
Filter
(
childElement
,
ConfigConstant
.
BLACKLIST_ELEMENT_NAME
,
discoveryEntity
);
}
else
if
(
StringUtils
.
equals
(
childElement
.
getName
(),
ConfigConstant
.
WHITELIST_ELEMENT_NAME
))
{
parse
IpAddress
Filter
(
childElement
,
ConfigConstant
.
WHITELIST_ELEMENT_NAME
,
discoveryEntity
);
parse
Host
Filter
(
childElement
,
ConfigConstant
.
WHITELIST_ELEMENT_NAME
,
discoveryEntity
);
}
else
if
(
StringUtils
.
equals
(
childElement
.
getName
(),
ConfigConstant
.
VERSION_ELEMENT_NAME
))
{
parseVersionFilter
(
childElement
,
discoveryEntity
);
}
...
...
@@ -144,23 +144,23 @@ public class ConfigParser extends Dom4JParser implements PluginConfigParser {
}
@SuppressWarnings
(
"rawtypes"
)
private
void
parse
IpAddress
Filter
(
Element
element
,
String
filterTypeValue
,
FilterHolderEntity
filterHolderEntity
)
{
IpAddressFilterEntity
ipAddressFilterEntity
=
filterHolderEntity
.
getIpAddress
FilterEntity
();
if
(
ipAddress
FilterEntity
!=
null
)
{
private
void
parse
Host
Filter
(
Element
element
,
String
filterTypeValue
,
FilterHolderEntity
filterHolderEntity
)
{
HostFilterEntity
hostFilterEntity
=
filterHolderEntity
.
getHost
FilterEntity
();
if
(
host
FilterEntity
!=
null
)
{
throw
new
PluginException
(
"Allow only one filter element to be configed, ["
+
ConfigConstant
.
BLACKLIST_ELEMENT_NAME
+
"] or ["
+
ConfigConstant
.
WHITELIST_ELEMENT_NAME
+
"]"
);
}
ipAddressFilterEntity
=
new
IpAddress
FilterEntity
();
ipAddress
FilterEntity
.
setFilterType
(
FilterType
.
fromString
(
filterTypeValue
));
hostFilterEntity
=
new
Host
FilterEntity
();
host
FilterEntity
.
setFilterType
(
FilterType
.
fromString
(
filterTypeValue
));
Attribute
globalFilterAttribute
=
element
.
attribute
(
ConfigConstant
.
FILTER_VALUE_ATTRIBUTE_NAME
);
if
(
globalFilterAttribute
!=
null
)
{
String
globalFilterValue
=
globalFilterAttribute
.
getData
().
toString
().
trim
();
List
<
String
>
globalFilterValueList
=
parseList
(
globalFilterValue
);
ipAddress
FilterEntity
.
setFilterValueList
(
globalFilterValueList
);
host
FilterEntity
.
setFilterValueList
(
globalFilterValueList
);
}
Map
<
String
,
List
<
String
>>
filterMap
=
ipAddress
FilterEntity
.
getFilterMap
();
Map
<
String
,
List
<
String
>>
filterMap
=
host
FilterEntity
.
getFilterMap
();
for
(
Iterator
elementIterator
=
element
.
elementIterator
();
elementIterator
.
hasNext
();)
{
Object
childElementObject
=
elementIterator
.
next
();
if
(
childElementObject
instanceof
Element
)
{
...
...
@@ -184,7 +184,7 @@ public class ConfigParser extends Dom4JParser implements PluginConfigParser {
}
}
filterHolderEntity
.
set
IpAddressFilterEntity
(
ipAddress
FilterEntity
);
filterHolderEntity
.
set
HostFilterEntity
(
host
FilterEntity
);
}
@SuppressWarnings
(
"rawtypes"
)
...
...
discovery-plugin-framework/src/main/java/com/nepxion/discovery/plugin/framework/configuration/PluginAutoConfiguration.java
View file @
5d6c43fa
...
...
@@ -20,13 +20,13 @@ import com.nepxion.discovery.plugin.framework.event.PluginEventWapper;
import
com.nepxion.discovery.plugin.framework.event.PluginPublisher
;
import
com.nepxion.discovery.plugin.framework.event.PluginSubscriber
;
import
com.nepxion.discovery.plugin.framework.listener.discovery.DiscoveryListenerExecutor
;
import
com.nepxion.discovery.plugin.framework.listener.discovery.
IpAddress
FilterDiscoveryListener
;
import
com.nepxion.discovery.plugin.framework.listener.discovery.
Host
FilterDiscoveryListener
;
import
com.nepxion.discovery.plugin.framework.listener.discovery.VersionFilterDiscoveryListener
;
import
com.nepxion.discovery.plugin.framework.listener.loadbalance.
IpAddress
FilterLoadBalanceListener
;
import
com.nepxion.discovery.plugin.framework.listener.loadbalance.
Host
FilterLoadBalanceListener
;
import
com.nepxion.discovery.plugin.framework.listener.loadbalance.LoadBalanceListenerExecutor
;
import
com.nepxion.discovery.plugin.framework.listener.loadbalance.VersionFilterLoadBalanceListener
;
import
com.nepxion.discovery.plugin.framework.listener.register.CountFilterRegisterListener
;
import
com.nepxion.discovery.plugin.framework.listener.register.
IpAddress
FilterRegisterListener
;
import
com.nepxion.discovery.plugin.framework.listener.register.
Host
FilterRegisterListener
;
import
com.nepxion.discovery.plugin.framework.listener.register.RegisterListenerExecutor
;
@Configuration
...
...
@@ -82,8 +82,8 @@ public class PluginAutoConfiguration {
}
@Bean
public
IpAddressFilterRegisterListener
ipAddress
FilterRegisterListener
()
{
return
new
IpAddress
FilterRegisterListener
();
public
HostFilterRegisterListener
host
FilterRegisterListener
()
{
return
new
Host
FilterRegisterListener
();
}
@Bean
...
...
@@ -92,8 +92,8 @@ public class PluginAutoConfiguration {
}
@Bean
public
IpAddressFilterDiscoveryListener
ipAddress
FilterDiscoveryListener
()
{
return
new
IpAddress
FilterDiscoveryListener
();
public
HostFilterDiscoveryListener
host
FilterDiscoveryListener
()
{
return
new
Host
FilterDiscoveryListener
();
}
@Bean
...
...
@@ -102,8 +102,8 @@ public class PluginAutoConfiguration {
}
@Bean
public
IpAddressFilterLoadBalanceListener
ipAddress
FilterLoadBalanceListener
()
{
return
new
IpAddress
FilterLoadBalanceListener
();
public
HostFilterLoadBalanceListener
host
FilterLoadBalanceListener
()
{
return
new
Host
FilterLoadBalanceListener
();
}
@Bean
...
...
discovery-plugin-framework/src/main/java/com/nepxion/discovery/plugin/framework/entity/FilterHolderEntity.java
View file @
5d6c43fa
...
...
@@ -19,18 +19,18 @@ import org.apache.commons.lang3.builder.ToStringStyle;
public
class
FilterHolderEntity
implements
Serializable
{
private
static
final
long
serialVersionUID
=
8767022123685151416L
;
private
IpAddressFilterEntity
ipAddress
FilterEntity
;
private
HostFilterEntity
host
FilterEntity
;
public
FilterHolderEntity
()
{
}
public
IpAddressFilterEntity
getIpAddress
FilterEntity
()
{
return
ipAddress
FilterEntity
;
public
HostFilterEntity
getHost
FilterEntity
()
{
return
host
FilterEntity
;
}
public
void
set
IpAddressFilterEntity
(
IpAddressFilterEntity
ipAddress
FilterEntity
)
{
this
.
ipAddressFilterEntity
=
ipAddress
FilterEntity
;
public
void
set
HostFilterEntity
(
HostFilterEntity
host
FilterEntity
)
{
this
.
hostFilterEntity
=
host
FilterEntity
;
}
@Override
...
...
discovery-plugin-framework/src/main/java/com/nepxion/discovery/plugin/framework/entity/
IpAddress
FilterEntity.java
→
discovery-plugin-framework/src/main/java/com/nepxion/discovery/plugin/framework/entity/
Host
FilterEntity.java
View file @
5d6c43fa
...
...
@@ -19,14 +19,14 @@ import org.apache.commons.lang3.builder.HashCodeBuilder;
import
org.apache.commons.lang3.builder.ToStringBuilder
;
import
org.apache.commons.lang3.builder.ToStringStyle
;
public
class
IpAddress
FilterEntity
implements
Serializable
{
public
class
Host
FilterEntity
implements
Serializable
{
private
static
final
long
serialVersionUID
=
3830016495318834467L
;
private
FilterType
filterType
;
private
List
<
String
>
filterValueList
;
private
Map
<
String
,
List
<
String
>>
filterMap
=
new
LinkedHashMap
<
String
,
List
<
String
>>();
public
IpAddress
FilterEntity
()
{
public
Host
FilterEntity
()
{
}
...
...
discovery-plugin-framework/src/main/java/com/nepxion/discovery/plugin/framework/event/RegisterFailureEvent.java
View file @
5d6c43fa
...
...
@@ -18,14 +18,14 @@ public class RegisterFailureEvent implements Serializable {
private
String
eventDescription
;
private
String
serviceId
;
private
String
ipAddress
;
private
String
host
;
private
int
port
;
public
RegisterFailureEvent
(
String
eventType
,
String
eventDescription
,
String
serviceId
,
String
ipAddress
,
int
port
)
{
public
RegisterFailureEvent
(
String
eventType
,
String
eventDescription
,
String
serviceId
,
String
host
,
int
port
)
{
this
.
eventType
=
eventType
;
this
.
eventDescription
=
eventDescription
;
this
.
serviceId
=
serviceId
;
this
.
ipAddress
=
ipAddress
;
this
.
host
=
host
;
this
.
port
=
port
;
}
...
...
@@ -41,8 +41,8 @@ public class RegisterFailureEvent implements Serializable {
return
serviceId
;
}
public
String
get
IpAddress
()
{
return
ipAddress
;
public
String
get
Host
()
{
return
host
;
}
public
int
getPort
()
{
...
...
discovery-plugin-framework/src/main/java/com/nepxion/discovery/plugin/framework/listener/discovery/DiscoveryListenerExecutor.java
View file @
5d6c43fa
...
...
@@ -17,7 +17,7 @@ import org.springframework.cloud.client.ServiceInstance;
// 因为内置监听触发的时候,需要优先过滤,所以顺序执行
public
class
DiscoveryListenerExecutor
{
@Autowired
private
IpAddressFilterDiscoveryListener
ipAddress
FilterDiscoveryListener
;
private
HostFilterDiscoveryListener
host
FilterDiscoveryListener
;
@Autowired
private
VersionFilterDiscoveryListener
versionFilterDiscoveryListener
;
...
...
@@ -26,22 +26,22 @@ public class DiscoveryListenerExecutor {
private
List
<
DiscoveryListener
>
discoveryListenerList
;
public
void
onGetInstances
(
String
serviceId
,
List
<
ServiceInstance
>
instances
)
{
ipAddress
FilterDiscoveryListener
.
onGetInstances
(
serviceId
,
instances
);
host
FilterDiscoveryListener
.
onGetInstances
(
serviceId
,
instances
);
versionFilterDiscoveryListener
.
onGetInstances
(
serviceId
,
instances
);
for
(
DiscoveryListener
discoveryListener
:
discoveryListenerList
)
{
if
(
discoveryListener
!=
ipAddress
FilterDiscoveryListener
&&
discoveryListener
!=
versionFilterDiscoveryListener
)
{
if
(
discoveryListener
!=
host
FilterDiscoveryListener
&&
discoveryListener
!=
versionFilterDiscoveryListener
)
{
discoveryListener
.
onGetInstances
(
serviceId
,
instances
);
}
}
}
public
void
onGetServices
(
List
<
String
>
services
)
{
ipAddress
FilterDiscoveryListener
.
onGetServices
(
services
);
host
FilterDiscoveryListener
.
onGetServices
(
services
);
versionFilterDiscoveryListener
.
onGetServices
(
services
);
for
(
DiscoveryListener
discoveryListener
:
discoveryListenerList
)
{
if
(
discoveryListener
!=
ipAddress
FilterDiscoveryListener
&&
discoveryListener
!=
versionFilterDiscoveryListener
)
{
if
(
discoveryListener
!=
host
FilterDiscoveryListener
&&
discoveryListener
!=
versionFilterDiscoveryListener
)
{
discoveryListener
.
onGetServices
(
services
);
}
}
...
...
discovery-plugin-framework/src/main/java/com/nepxion/discovery/plugin/framework/listener/discovery/
IpAddress
FilterDiscoveryListener.java
→
discovery-plugin-framework/src/main/java/com/nepxion/discovery/plugin/framework/listener/discovery/
Host
FilterDiscoveryListener.java
View file @
5d6c43fa
...
...
@@ -20,16 +20,16 @@ import org.springframework.cloud.client.ServiceInstance;
import
com.nepxion.discovery.plugin.framework.constant.PluginConstant
;
import
com.nepxion.discovery.plugin.framework.entity.DiscoveryEntity
;
import
com.nepxion.discovery.plugin.framework.entity.FilterType
;
import
com.nepxion.discovery.plugin.framework.entity.
IpAddress
FilterEntity
;
import
com.nepxion.discovery.plugin.framework.entity.
Host
FilterEntity
;
import
com.nepxion.discovery.plugin.framework.entity.RuleEntity
;
public
class
IpAddress
FilterDiscoveryListener
extends
AbstractDiscoveryListener
{
public
class
Host
FilterDiscoveryListener
extends
AbstractDiscoveryListener
{
@Override
public
void
onGetInstances
(
String
serviceId
,
List
<
ServiceInstance
>
instances
)
{
apply
IpAddress
Filter
(
serviceId
,
instances
);
apply
Host
Filter
(
serviceId
,
instances
);
}
private
void
apply
IpAddress
Filter
(
String
providerServiceId
,
List
<
ServiceInstance
>
instances
)
{
private
void
apply
Host
Filter
(
String
providerServiceId
,
List
<
ServiceInstance
>
instances
)
{
RuleEntity
ruleEntity
=
ruleCache
.
get
(
PluginConstant
.
RULE
);
if
(
ruleEntity
==
null
)
{
return
;
...
...
@@ -40,15 +40,15 @@ public class IpAddressFilterDiscoveryListener extends AbstractDiscoveryListener
return
;
}
IpAddressFilterEntity
ipAddressFilterEntity
=
discoveryEntity
.
getIpAddress
FilterEntity
();
if
(
ipAddress
FilterEntity
==
null
)
{
HostFilterEntity
hostFilterEntity
=
discoveryEntity
.
getHost
FilterEntity
();
if
(
host
FilterEntity
==
null
)
{
return
;
}
FilterType
filterType
=
ipAddress
FilterEntity
.
getFilterType
();
FilterType
filterType
=
host
FilterEntity
.
getFilterType
();
List
<
String
>
globalFilterValueList
=
ipAddress
FilterEntity
.
getFilterValueList
();
Map
<
String
,
List
<
String
>>
filterMap
=
ipAddress
FilterEntity
.
getFilterMap
();
List
<
String
>
globalFilterValueList
=
host
FilterEntity
.
getFilterValueList
();
Map
<
String
,
List
<
String
>>
filterMap
=
host
FilterEntity
.
getFilterMap
();
List
<
String
>
filterValueList
=
filterMap
.
get
(
providerServiceId
);
List
<
String
>
allFilterValueList
=
new
ArrayList
<
String
>();
...
...
@@ -79,9 +79,9 @@ public class IpAddressFilterDiscoveryListener extends AbstractDiscoveryListener
}
}
private
boolean
validateBlacklist
(
List
<
String
>
allFilterValueList
,
String
ipAddress
)
{
private
boolean
validateBlacklist
(
List
<
String
>
allFilterValueList
,
String
host
)
{
for
(
String
filterValue
:
allFilterValueList
)
{
if
(
ipAddress
.
startsWith
(
filterValue
))
{
if
(
host
.
startsWith
(
filterValue
))
{
return
true
;
}
}
...
...
@@ -89,10 +89,10 @@ public class IpAddressFilterDiscoveryListener extends AbstractDiscoveryListener
return
false
;
}
private
boolean
validateWhitelist
(
List
<
String
>
allFilterValueList
,
String
ipAddress
)
{
private
boolean
validateWhitelist
(
List
<
String
>
allFilterValueList
,
String
host
)
{
boolean
matched
=
true
;
for
(
String
filterValue
:
allFilterValueList
)
{
if
(
ipAddress
.
startsWith
(
filterValue
))
{
if
(
host
.
startsWith
(
filterValue
))
{
matched
=
false
;
break
;
}
...
...
discovery-plugin-framework/src/main/java/com/nepxion/discovery/plugin/framework/listener/loadbalance/
IpAddress
FilterLoadBalanceListener.java
→
discovery-plugin-framework/src/main/java/com/nepxion/discovery/plugin/framework/listener/loadbalance/
Host
FilterLoadBalanceListener.java
View file @
5d6c43fa
...
...
@@ -19,17 +19,17 @@ import org.apache.commons.collections4.CollectionUtils;
import
com.nepxion.discovery.plugin.framework.constant.PluginConstant
;
import
com.nepxion.discovery.plugin.framework.entity.DiscoveryEntity
;
import
com.nepxion.discovery.plugin.framework.entity.FilterType
;
import
com.nepxion.discovery.plugin.framework.entity.
IpAddress
FilterEntity
;
import
com.nepxion.discovery.plugin.framework.entity.
Host
FilterEntity
;
import
com.nepxion.discovery.plugin.framework.entity.RuleEntity
;
import
com.netflix.loadbalancer.Server
;
public
class
IpAddress
FilterLoadBalanceListener
extends
AbstractLoadBalanceListener
{
public
class
Host
FilterLoadBalanceListener
extends
AbstractLoadBalanceListener
{
@Override
public
void
onGetServers
(
String
serviceId
,
List
<?
extends
Server
>
servers
)
{
apply
IpAddress
Filter
(
serviceId
,
servers
);
apply
Host
Filter
(
serviceId
,
servers
);
}
private
void
apply
IpAddress
Filter
(
String
providerServiceId
,
List
<?
extends
Server
>
servers
)
{
private
void
apply
Host
Filter
(
String
providerServiceId
,
List
<?
extends
Server
>
servers
)
{
RuleEntity
ruleEntity
=
ruleCache
.
get
(
PluginConstant
.
RULE
);
if
(
ruleEntity
==
null
)
{
return
;
...
...
@@ -40,15 +40,15 @@ public class IpAddressFilterLoadBalanceListener extends AbstractLoadBalanceListe
return
;
}
IpAddressFilterEntity
ipAddressFilterEntity
=
discoveryEntity
.
getIpAddress
FilterEntity
();
if
(
ipAddress
FilterEntity
==
null
)
{
HostFilterEntity
hostFilterEntity
=
discoveryEntity
.
getHost
FilterEntity
();
if
(
host
FilterEntity
==
null
)
{
return
;
}
FilterType
filterType
=
ipAddress
FilterEntity
.
getFilterType
();
FilterType
filterType
=
host
FilterEntity
.
getFilterType
();
List
<
String
>
globalFilterValueList
=
ipAddress
FilterEntity
.
getFilterValueList
();
Map
<
String
,
List
<
String
>>
filterMap
=
ipAddress
FilterEntity
.
getFilterMap
();
List
<
String
>
globalFilterValueList
=
host
FilterEntity
.
getFilterValueList
();
Map
<
String
,
List
<
String
>>
filterMap
=
host
FilterEntity
.
getFilterMap
();
List
<
String
>
filterValueList
=
filterMap
.
get
(
providerServiceId
);
List
<
String
>
allFilterValueList
=
new
ArrayList
<
String
>();
...
...
@@ -79,9 +79,9 @@ public class IpAddressFilterLoadBalanceListener extends AbstractLoadBalanceListe
}
}
private
boolean
validateBlacklist
(
List
<
String
>
allFilterValueList
,
String
ipAddress
)
{
private
boolean
validateBlacklist
(
List
<
String
>
allFilterValueList
,
String
host
)
{
for
(
String
filterValue
:
allFilterValueList
)
{
if
(
ipAddress
.
startsWith
(
filterValue
))
{
if
(
host
.
startsWith
(
filterValue
))
{
return
true
;
}
}
...
...
@@ -89,10 +89,10 @@ public class IpAddressFilterLoadBalanceListener extends AbstractLoadBalanceListe
return
false
;
}
private
boolean
validateWhitelist
(
List
<
String
>
allFilterValueList
,
String
ipAddress
)
{
private
boolean
validateWhitelist
(
List
<
String
>
allFilterValueList
,
String
host
)
{
boolean
matched
=
true
;
for
(
String
filterValue
:
allFilterValueList
)
{
if
(
ipAddress
.
startsWith
(
filterValue
))
{
if
(
host
.
startsWith
(
filterValue
))
{
matched
=
false
;
break
;
}
...
...
discovery-plugin-framework/src/main/java/com/nepxion/discovery/plugin/framework/listener/loadbalance/LoadBalanceListenerExecutor.java
View file @
5d6c43fa
...
...
@@ -19,7 +19,7 @@ import com.netflix.loadbalancer.ZoneAwareLoadBalancer;
// 因为内置监听触发的时候,需要优先过滤,所以顺序执行
public
class
LoadBalanceListenerExecutor
{
@Autowired
private
IpAddressFilterLoadBalanceListener
ipAddress
FilterLoadBalanceListener
;
private
HostFilterLoadBalanceListener
host
FilterLoadBalanceListener
;
@Autowired
private
VersionFilterLoadBalanceListener
versionFilterLoadBalanceListener
;
...
...
@@ -27,7 +27,7 @@ public class LoadBalanceListenerExecutor {
private
ZoneAwareLoadBalancer
<?>
loadBalancer
;
public
void
onGetServers
(
String
serviceId
,
List
<?
extends
Server
>
servers
)
{
ipAddress
FilterLoadBalanceListener
.
onGetServers
(
serviceId
,
servers
);
host
FilterLoadBalanceListener
.
onGetServers
(
serviceId
,
servers
);
versionFilterLoadBalanceListener
.
onGetServers
(
serviceId
,
servers
);
}
...
...
discovery-plugin-framework/src/main/java/com/nepxion/discovery/plugin/framework/listener/register/CountFilterRegisterListener.java
View file @
5d6c43fa
...
...
@@ -29,13 +29,13 @@ public class CountFilterRegisterListener extends AbstractRegisterListener {
@Override
public
void
onRegister
(
Registration
registration
)
{
String
serviceId
=
registration
.
getServiceId
();
String
ipAddress
=
pluginAdapter
.
getHost
(
registration
);
String
host
=
pluginAdapter
.
getHost
(
registration
);
int
port
=
pluginAdapter
.
getPort
(
registration
);
applyCountFilter
(
serviceId
,
ipAddress
,
port
);
applyCountFilter
(
serviceId
,
host
,
port
);
}
private
void
applyCountFilter
(
String
serviceId
,
String
ipAddress
,
int
port
)
{
private
void
applyCountFilter
(
String
serviceId
,
String
host
,
int
port
)
{
RuleEntity
ruleEntity
=
ruleCache
.
get
(
PluginConstant
.
RULE
);
if
(
ruleEntity
==
null
)
{
return
;
...
...
@@ -69,16 +69,16 @@ public class CountFilterRegisterListener extends AbstractRegisterListener {
int
count
=
discoveryClient
.
getRealInstances
(
serviceId
).
size
();
if
(
count
>=
maxCount
)
{
onRegisterFailure
(
maxCount
,
serviceId
,
ipAddress
,
port
);
onRegisterFailure
(
maxCount
,
serviceId
,
host
,
port
);
}
}
private
void
onRegisterFailure
(
int
maxCount
,
String
serviceId
,
String
ipAddress
,
int
port
)
{
String
description
=
ipAddress
+
" isn't allowed to register to Register server, reach max limited count="
+
maxCount
;
private
void
onRegisterFailure
(
int
maxCount
,
String
serviceId
,
String
host
,
int
port
)
{
String
description
=
host
+
" isn't allowed to register to Register server, reach max limited count="
+
maxCount
;
Boolean
registerFailureEventEnabled
=
pluginContextAware
.
getEnvironment
().
getProperty
(
PluginConstant
.
SPRING_APPLICATION_REGISTER_FAILURE_EVENT_ENABLED
,
Boolean
.
class
,
Boolean
.
FALSE
);
if
(
registerFailureEventEnabled
)
{
pluginPublisher
.
asyncPublish
(
new
RegisterFailureEvent
(
PluginConstant
.
REACH_MAX_LIMITED_COUNT
,
description
,
serviceId
,
ipAddress
,
port
));
pluginPublisher
.
asyncPublish
(
new
RegisterFailureEvent
(
PluginConstant
.
REACH_MAX_LIMITED_COUNT
,
description
,
serviceId
,
host
,
port
));
}
throw
new
PluginException
(
description
);
...
...
discovery-plugin-framework/src/main/java/com/nepxion/discovery/plugin/framework/listener/register/
IpAddress
FilterRegisterListener.java
→
discovery-plugin-framework/src/main/java/com/nepxion/discovery/plugin/framework/listener/register/
Host
FilterRegisterListener.java
View file @
5d6c43fa
...
...
@@ -18,23 +18,23 @@ import org.springframework.cloud.client.serviceregistry.Registration;
import
com.nepxion.discovery.plugin.framework.constant.PluginConstant
;
import
com.nepxion.discovery.plugin.framework.entity.FilterType
;
import
com.nepxion.discovery.plugin.framework.entity.
IpAddress
FilterEntity
;
import
com.nepxion.discovery.plugin.framework.entity.
Host
FilterEntity
;
import
com.nepxion.discovery.plugin.framework.entity.RegisterEntity
;
import
com.nepxion.discovery.plugin.framework.entity.RuleEntity
;
import
com.nepxion.discovery.plugin.framework.event.RegisterFailureEvent
;
import
com.nepxion.discovery.plugin.framework.exception.PluginException
;
public
class
IpAddress
FilterRegisterListener
extends
AbstractRegisterListener
{
public
class
Host
FilterRegisterListener
extends
AbstractRegisterListener
{
@Override
public
void
onRegister
(
Registration
registration
)
{
String
serviceId
=
registration
.
getServiceId
();
String
ipAddress
=
pluginAdapter
.
getHost
(
registration
);
String
host
=
pluginAdapter
.
getHost
(
registration
);
int
port
=
pluginAdapter
.
getPort
(
registration
);
apply
IpAddressFilter
(
serviceId
,
ipAddress
,
port
);
apply
HostFilter
(
serviceId
,
host
,
port
);
}
private
void
apply
IpAddressFilter
(
String
serviceId
,
String
ipAddress
,
int
port
)
{
private
void
apply
HostFilter
(
String
serviceId
,
String
host
,
int
port
)
{
RuleEntity
ruleEntity
=
ruleCache
.
get
(
PluginConstant
.
RULE
);
if
(
ruleEntity
==
null
)
{
return
;
...
...
@@ -45,15 +45,15 @@ public class IpAddressFilterRegisterListener extends AbstractRegisterListener {
return
;
}
IpAddressFilterEntity
ipAddressFilterEntity
=
registerEntity
.
getIpAddress
FilterEntity
();
if
(
ipAddress
FilterEntity
==
null
)
{
HostFilterEntity
hostFilterEntity
=
registerEntity
.
getHost
FilterEntity
();
if
(
host
FilterEntity
==
null
)
{
return
;
}
FilterType
filterType
=
ipAddress
FilterEntity
.
getFilterType
();
FilterType
filterType
=
host
FilterEntity
.
getFilterType
();
List
<
String
>
globalFilterValueList
=
ipAddress
FilterEntity
.
getFilterValueList
();
Map
<
String
,
List
<
String
>>
filterMap
=
ipAddress
FilterEntity
.
getFilterMap
();
List
<
String
>
globalFilterValueList
=
host
FilterEntity
.
getFilterValueList
();
Map
<
String
,
List
<
String
>>
filterMap
=
host
FilterEntity
.
getFilterMap
();
List
<
String
>
filterValueList
=
filterMap
.
get
(
serviceId
);
List
<
String
>
allFilterValueList
=
new
ArrayList
<
String
>();
...
...
@@ -67,42 +67,42 @@ public class IpAddressFilterRegisterListener extends AbstractRegisterListener {
switch
(
filterType
)
{
case
BLACKLIST:
validateBlacklist
(
filterType
,
allFilterValueList
,
serviceId
,
ipAddress
,
port
);
validateBlacklist
(
filterType
,
allFilterValueList
,
serviceId
,
host
,
port
);
break
;
case
WHITELIST:
validateWhitelist
(
filterType
,
allFilterValueList
,
serviceId
,
ipAddress
,
port
);
validateWhitelist
(
filterType
,
allFilterValueList
,
serviceId
,
host
,
port
);
break
;
}
}
private
void
validateBlacklist
(
FilterType
filterType
,
List
<
String
>
allFilterValueList
,
String
serviceId
,
String
ipAddress
,
int
port
)
{
private
void
validateBlacklist
(
FilterType
filterType
,
List
<
String
>
allFilterValueList
,
String
serviceId
,
String
host
,
int
port
)
{
for
(
String
filterValue
:
allFilterValueList
)
{
if
(
ipAddress
.
startsWith
(
filterValue
))
{
onRegisterFailure
(
filterType
,
allFilterValueList
,
serviceId
,
ipAddress
,
port
);
if
(
host
.
startsWith
(
filterValue
))
{
onRegisterFailure
(
filterType
,
allFilterValueList
,
serviceId
,
host
,
port
);
}
}
}
private
void
validateWhitelist
(
FilterType
filterType
,
List
<
String
>
allFilterValueList
,
String
serviceId
,
String
ipAddress
,
int
port
)
{
private
void
validateWhitelist
(
FilterType
filterType
,
List
<
String
>
allFilterValueList
,
String
serviceId
,
String
host
,
int
port
)
{
boolean
matched
=
true
;
for
(
String
filterValue
:
allFilterValueList
)
{
if
(
ipAddress
.
startsWith
(
filterValue
))
{
if
(
host
.
startsWith
(
filterValue
))
{
matched
=
false
;
break
;
}
}
if
(
matched
)
{
onRegisterFailure
(
filterType
,
allFilterValueList
,
serviceId
,
ipAddress
,
port
);
onRegisterFailure
(
filterType
,
allFilterValueList
,
serviceId
,
host
,
port
);
}
}
private
void
onRegisterFailure
(
FilterType
filterType
,
List
<
String
>
allFilterValueList
,
String
serviceId
,
String
ipAddress
,
int
port
)
{
String
description
=
ipAddress
+
" isn't allowed to register to Register server, not match IP address
"
+
filterType
+
"="
+
allFilterValueList
;
private
void
onRegisterFailure
(
FilterType
filterType
,
List
<
String
>
allFilterValueList
,
String
serviceId
,
String
host
,
int
port
)
{
String
description
=
host
+
" isn't allowed to register to Register server, not match host
"
+
filterType
+
"="
+
allFilterValueList
;
Boolean
registerFailureEventEnabled
=
pluginContextAware
.
getEnvironment
().
getProperty
(
PluginConstant
.
SPRING_APPLICATION_REGISTER_FAILURE_EVENT_ENABLED
,
Boolean
.
class
,
Boolean
.
FALSE
);
if
(
registerFailureEventEnabled
)
{
pluginPublisher
.
asyncPublish
(
new
RegisterFailureEvent
(
filterType
.
toString
(),
description
,
serviceId
,
ipAddress
,
port
));
pluginPublisher
.
asyncPublish
(
new
RegisterFailureEvent
(
filterType
.
toString
(),
description
,
serviceId
,
host
,
port
));
}
throw
new
PluginException
(
description
);
...
...
discovery-plugin-framework/src/main/java/com/nepxion/discovery/plugin/framework/listener/register/RegisterListenerExecutor.java
View file @
5d6c43fa
...
...
@@ -20,52 +20,52 @@ public class RegisterListenerExecutor {
private
CountFilterRegisterListener
countFilterRegisterListener
;
@Autowired
private
IpAddressFilterRegisterListener
ipAddress
FilterRegisterListener
;
private
HostFilterRegisterListener
host
FilterRegisterListener
;
@Autowired
private
List
<
RegisterListener
>
registerListenerList
;
public
void
onRegister
(
Registration
registration
)
{
for
(
RegisterListener
registerListener
:
registerListenerList
)
{
if
(
registerListener
!=
countFilterRegisterListener
&&
registerListener
!=
ipAddress
FilterRegisterListener
)
{
if
(
registerListener
!=
countFilterRegisterListener
&&
registerListener
!=
host
FilterRegisterListener
)
{
registerListener
.
onRegister
(
registration
);
}
}
countFilterRegisterListener
.
onRegister
(
registration
);
ipAddress
FilterRegisterListener
.
onRegister
(
registration
);
host
FilterRegisterListener
.
onRegister
(
registration
);
}
public
void
onDeregister
(
Registration
registration
)
{
for
(
RegisterListener
registerListener
:
registerListenerList
)
{
if
(
registerListener
!=
countFilterRegisterListener
&&
registerListener
!=
ipAddress
FilterRegisterListener
)
{
if
(
registerListener
!=
countFilterRegisterListener
&&
registerListener
!=
host
FilterRegisterListener
)
{
registerListener
.
onDeregister
(
registration
);
}
}
countFilterRegisterListener
.
onDeregister
(
registration
);
ipAddress
FilterRegisterListener
.
onDeregister
(
registration
);
host
FilterRegisterListener
.
onDeregister
(
registration
);
}
public
void
onSetStatus
(
Registration
registration
,
String
status
)
{
for
(
RegisterListener
registerListener
:
registerListenerList
)
{
if
(
registerListener
!=
countFilterRegisterListener
&&
registerListener
!=
ipAddress
FilterRegisterListener
)
{
if
(
registerListener
!=
countFilterRegisterListener
&&
registerListener
!=
host
FilterRegisterListener
)
{
registerListener
.
onSetStatus
(
registration
,
status
);
}
}
countFilterRegisterListener
.
onSetStatus
(
registration
,
status
);
ipAddress
FilterRegisterListener
.
onSetStatus
(
registration
,
status
);
host
FilterRegisterListener
.
onSetStatus
(
registration
,
status
);
}
public
void
onClose
()
{
for
(
RegisterListener
registerListener
:
registerListenerList
)
{
if
(
registerListener
!=
countFilterRegisterListener
&&
registerListener
!=
ipAddress
FilterRegisterListener
)
{
if
(
registerListener
!=
countFilterRegisterListener
&&
registerListener
!=
host
FilterRegisterListener
)
{
registerListener
.
onClose
();
}
}
countFilterRegisterListener
.
onClose
();
ipAddress
FilterRegisterListener
.
onClose
();
host
FilterRegisterListener
.
onClose
();
}
}
\ No newline at end of file
discovery-springcloud-example/src/main/java/com/nepxion/discovery/plugin/example/extension/MySubscriber.java
View file @
5d6c43fa
...
...
@@ -17,6 +17,6 @@ import com.nepxion.eventbus.annotation.EventBus;
public
class
MySubscriber
{
@Subscribe
public
void
onRegisterFailure
(
RegisterFailureEvent
registerFailureEvent
)
{
System
.
out
.
println
(
"========== 注册失败:eventType="
+
registerFailureEvent
.
getEventType
()
+
", eventDescription="
+
registerFailureEvent
.
getEventDescription
()
+
", serviceId="
+
registerFailureEvent
.
getServiceId
()
+
",
ipAddress="
+
registerFailureEvent
.
getIpAddress
()
+
", port="
+
registerFailureEvent
.
getPort
());
System
.
out
.
println
(
"========== 注册失败:eventType="
+
registerFailureEvent
.
getEventType
()
+
", eventDescription="
+
registerFailureEvent
.
getEventDescription
()
+
", serviceId="
+
registerFailureEvent
.
getServiceId
()
+
",
host="
+
registerFailureEvent
.
getHost
()
+
", port="
+
registerFailureEvent
.
getPort
());
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment