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
e53c12c0
Commit
e53c12c0
authored
Aug 14, 2018
by
Nepxion
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
重构通过Rest方式实时版本路由功能
parent
3a2823df
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
125 additions
and
34 deletions
+125
-34
discovery-plugin-strategy-extension-service/src/main/java/com/nepxion/discovery/plugin/strategy/extension/service/configuration/ServiceStrategyAutoConfiguration.java
+7
-0
discovery-plugin-strategy-extension-service/src/main/java/com/nepxion/discovery/plugin/strategy/extension/service/impl/VersionDiscoveryEnabledAdapter.java
+24
-1
discovery-plugin-strategy-extension-zuul/src/main/java/com/nepxion/discovery/plugin/strategy/extension/zuul/configuration/ZuulStrategyAutoConfiguration.java
+30
-0
discovery-plugin-strategy-extension-zuul/src/main/java/com/nepxion/discovery/plugin/strategy/extension/zuul/impl/VersionDiscoveryEnabledAdapter.java
+24
-1
discovery-plugin-strategy-extension-zuul/src/main/resources/META-INF/spring.factories
+3
-2
discovery-plugin-strategy/src/main/java/com/nepxion/discovery/plugin/strategy/discovery/DiscoveryEnabledExtension.java
+19
-0
discovery-springcloud-example-service/src/main/java/com/nepxion/discovery/plugin/example/service/DiscoveryApplicationA1.java
+4
-3
discovery-springcloud-example-service/src/main/java/com/nepxion/discovery/plugin/example/service/extension/MyDiscoveryEnabledExtension.java
+6
-13
discovery-springcloud-example-zuul/src/main/java/com/nepxion/discovery/plugin/example/zuul/DiscoveryApplicationZuul.java
+4
-3
discovery-springcloud-example-zuul/src/main/java/com/nepxion/discovery/plugin/example/zuul/extension/MyDiscoveryEnabledExtension.java
+4
-11
No files found.
discovery-plugin-strategy-extension-service/src/main/java/com/nepxion/discovery/plugin/strategy/extension/service/configuration/ServiceStrategyAutoConfiguration.java
View file @
e53c12c0
...
...
@@ -22,6 +22,7 @@ import com.nepxion.discovery.plugin.strategy.extension.service.aop.FeignStrategy
import
com.nepxion.discovery.plugin.strategy.extension.service.aop.ServiceStrategyAutoScanProxy
;
import
com.nepxion.discovery.plugin.strategy.extension.service.aop.ServiceStrategyInterceptor
;
import
com.nepxion.discovery.plugin.strategy.extension.service.constant.ServiceStrategyConstant
;
import
com.nepxion.discovery.plugin.strategy.extension.service.impl.VersionDiscoveryEnabledAdapter
;
@Configuration
@AutoConfigureBefore
(
RibbonClientConfiguration
.
class
)
...
...
@@ -58,4 +59,9 @@ public class ServiceStrategyAutoConfiguration {
public
FeignStrategyInterceptor
feignStrategyInterceptor
()
{
return
new
FeignStrategyInterceptor
(
feignHeaders
);
}
@Bean
public
VersionDiscoveryEnabledAdapter
discoveryEnabledAdapter
()
{
return
new
VersionDiscoveryEnabledAdapter
();
}
}
\ No newline at end of file
discovery-plugin-strategy-extension-service/src/main/java/com/nepxion/discovery/plugin/strategy/extension/service/impl/VersionDiscoveryEnabledAdapter.java
View file @
e53c12c0
...
...
@@ -12,18 +12,32 @@ package com.nepxion.discovery.plugin.strategy.extension.service.impl;
import
java.util.Map
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.context.request.RequestContextHolder
;
import
org.springframework.web.context.request.ServletRequestAttributes
;
import
com.nepxion.discovery.common.constant.DiscoveryConstant
;
import
com.nepxion.discovery.common.util.JsonUtil
;
import
com.nepxion.discovery.plugin.strategy.discovery.DiscoveryEnabledAdapter
;
import
com.nepxion.discovery.plugin.strategy.discovery.DiscoveryEnabledExtension
;
import
com.netflix.loadbalancer.Server
;
public
class
VersionDiscoveryEnabledAdapter
implements
DiscoveryEnabledAdapter
{
@SuppressWarnings
(
"unchecked"
)
@Autowired
(
required
=
false
)
private
DiscoveryEnabledExtension
discoveryEnabledExtension
;
@Override
public
boolean
apply
(
Server
server
,
Map
<
String
,
String
>
metadata
)
{
boolean
enabled
=
applyVersion
(
server
,
metadata
);
if
(!
enabled
)
{
return
false
;
}
return
applyExtension
(
server
,
metadata
);
}
@SuppressWarnings
(
"unchecked"
)
private
boolean
applyVersion
(
Server
server
,
Map
<
String
,
String
>
metadata
)
{
ServletRequestAttributes
attributes
=
(
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
();
if
(
attributes
==
null
)
{
return
true
;
...
...
@@ -52,4 +66,12 @@ public class VersionDiscoveryEnabledAdapter implements DiscoveryEnabledAdapter {
return
false
;
}
private
boolean
applyExtension
(
Server
server
,
Map
<
String
,
String
>
metadata
)
{
if
(
discoveryEnabledExtension
==
null
)
{
return
true
;
}
return
discoveryEnabledExtension
.
apply
(
server
,
metadata
);
}
}
\ No newline at end of file
discovery-plugin-strategy-extension-zuul/src/main/java/com/nepxion/discovery/plugin/strategy/extension/zuul/configuration/ZuulStrategyAutoConfiguration.java
0 → 100644
View file @
e53c12c0
package
com
.
nepxion
.
discovery
.
plugin
.
strategy
.
extension
.
zuul
.
configuration
;
/**
* <p>Title: Nepxion Discovery</p>
* <p>Description: Nepxion Discovery</p>
* <p>Copyright: Copyright (c) 2017-2050</p>
* <p>Company: Nepxion</p>
* @author Haojun Ren
* @version 1.0
*/
import
org.springframework.boot.autoconfigure.AutoConfigureBefore
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.cloud.netflix.ribbon.RibbonClientConfiguration
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
com.nepxion.discovery.plugin.strategy.constant.StrategyConstant
;
import
com.nepxion.discovery.plugin.strategy.extension.zuul.impl.VersionDiscoveryEnabledAdapter
;
@Configuration
@AutoConfigureBefore
(
RibbonClientConfiguration
.
class
)
@ConditionalOnProperty
(
value
=
StrategyConstant
.
SPRING_APPLICATION_STRATEGY_CONTROL_ENABLED
,
matchIfMissing
=
true
)
public
class
ZuulStrategyAutoConfiguration
{
@Bean
public
VersionDiscoveryEnabledAdapter
discoveryEnabledAdapter
()
{
return
new
VersionDiscoveryEnabledAdapter
();
}
}
\ No newline at end of file
discovery-plugin-strategy-extension-zuul/src/main/java/com/nepxion/discovery/plugin/strategy/extension/zuul/impl/VersionDiscoveryEnabledAdapter.java
View file @
e53c12c0
...
...
@@ -12,17 +12,31 @@ package com.nepxion.discovery.plugin.strategy.extension.zuul.impl;
import
java.util.Map
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
com.nepxion.discovery.common.constant.DiscoveryConstant
;
import
com.nepxion.discovery.common.util.JsonUtil
;
import
com.nepxion.discovery.plugin.strategy.discovery.DiscoveryEnabledAdapter
;
import
com.nepxion.discovery.plugin.strategy.discovery.DiscoveryEnabledExtension
;
import
com.netflix.loadbalancer.Server
;
import
com.netflix.zuul.context.RequestContext
;
public
class
VersionDiscoveryEnabledAdapter
implements
DiscoveryEnabledAdapter
{
@SuppressWarnings
(
"unchecked"
)
@Autowired
(
required
=
false
)
private
DiscoveryEnabledExtension
discoveryEnabledExtension
;
@Override
public
boolean
apply
(
Server
server
,
Map
<
String
,
String
>
metadata
)
{
boolean
enabled
=
applyVersion
(
server
,
metadata
);
if
(!
enabled
)
{
return
false
;
}
return
applyExtension
(
server
,
metadata
);
}
@SuppressWarnings
(
"unchecked"
)
private
boolean
applyVersion
(
Server
server
,
Map
<
String
,
String
>
metadata
)
{
RequestContext
context
=
RequestContext
.
getCurrentContext
();
String
versionJson
=
context
.
getRequest
().
getHeader
(
DiscoveryConstant
.
VERSION
);
if
(
StringUtils
.
isEmpty
(
versionJson
))
{
...
...
@@ -47,4 +61,12 @@ public class VersionDiscoveryEnabledAdapter implements DiscoveryEnabledAdapter {
return
false
;
}
private
boolean
applyExtension
(
Server
server
,
Map
<
String
,
String
>
metadata
)
{
if
(
discoveryEnabledExtension
==
null
)
{
return
true
;
}
return
discoveryEnabledExtension
.
apply
(
server
,
metadata
);
}
}
\ No newline at end of file
discovery-plugin-strategy-extension-zuul/src/main/resources/META-INF/spring.factories
View file @
e53c12c0
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.nepxion.discovery.plugin.strategy.configuration.StrategyAutoConfiguration
\ No newline at end of file
com.nepxion.discovery.plugin.strategy.configuration.StrategyAutoConfiguration,\
com.nepxion.discovery.plugin.strategy.extension.zuul.configuration.ZuulStrategyAutoConfiguration
\ No newline at end of file
discovery-plugin-strategy/src/main/java/com/nepxion/discovery/plugin/strategy/discovery/DiscoveryEnabledExtension.java
0 → 100644
View file @
e53c12c0
package
com
.
nepxion
.
discovery
.
plugin
.
strategy
.
discovery
;
/**
* <p>Title: Nepxion Discovery</p>
* <p>Description: Nepxion Discovery</p>
* <p>Copyright: Copyright (c) 2017-2050</p>
* <p>Company: Nepxion</p>
* @author Haojun Ren
* @version 1.0
*/
import
java.util.Map
;
import
com.netflix.loadbalancer.Server
;
public
interface
DiscoveryEnabledExtension
{
boolean
apply
(
Server
server
,
Map
<
String
,
String
>
metadata
);
}
\ No newline at end of file
discovery-springcloud-example-service/src/main/java/com/nepxion/discovery/plugin/example/service/DiscoveryApplicationA1.java
View file @
e53c12c0
...
...
@@ -18,7 +18,7 @@ import org.springframework.context.annotation.Bean;
import
com.nepxion.discovery.plugin.example.service.extension.MyDiscoveryListener
;
import
com.nepxion.discovery.plugin.example.service.extension.MyLoadBalanceListener
;
import
com.nepxion.discovery.plugin.example.service.extension.MyRegisterListener
;
import
com.nepxion.discovery.plugin.example.service.extension.MyDiscoveryEnabled
Adapter
;
import
com.nepxion.discovery.plugin.example.service.extension.MyDiscoveryEnabled
Extension
;
import
com.nepxion.discovery.plugin.example.service.extension.MySubscriber
;
@SpringBootApplication
...
...
@@ -52,7 +52,7 @@ public class DiscoveryApplicationA1 {
}
@Bean
public
MyDiscoveryEnabled
Adapter
myDiscoveryEnabledAdapter
()
{
return
new
MyDiscoveryEnabled
Adapter
();
public
MyDiscoveryEnabled
Extension
myDiscoveryEnabledExtension
()
{
return
new
MyDiscoveryEnabled
Extension
();
}
}
\ No newline at end of file
discovery-springcloud-example-service/src/main/java/com/nepxion/discovery/plugin/example/service/extension/MyDiscoveryEnabled
Adapter
.java
→
discovery-springcloud-example-service/src/main/java/com/nepxion/discovery/plugin/example/service/extension/MyDiscoveryEnabled
Extension
.java
View file @
e53c12c0
...
...
@@ -18,31 +18,24 @@ import org.springframework.web.context.request.RequestContextHolder;
import
org.springframework.web.context.request.ServletRequestAttributes
;
import
com.nepxion.discovery.common.constant.DiscoveryConstant
;
import
com.nepxion.discovery.plugin.strategy.discovery.DiscoveryEnabledExtension
;
import
com.nepxion.discovery.plugin.strategy.extension.service.constant.ServiceStrategyConstant
;
import
com.nepxion.discovery.plugin.strategy.extension.service.context.ServiceStrategyContext
;
import
com.nepxion.discovery.plugin.strategy.extension.service.impl.VersionDiscoveryEnabledAdapter
;
import
com.netflix.loadbalancer.Server
;
// 实现了组合策略,版本路由策略+自定义策略
// 如果不想要版本路由策略,请直接implements DiscoveryEnabledAdapter,实现自定义策略
public
class
MyDiscoveryEnabledAdapter
extends
VersionDiscoveryEnabledAdapter
{
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
MyDiscoveryEnabledAdapter
.
class
);
public
class
MyDiscoveryEnabledExtension
implements
DiscoveryEnabledExtension
{
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
MyDiscoveryEnabledExtension
.
class
);
@Override
public
boolean
apply
(
Server
server
,
Map
<
String
,
String
>
metadata
)
{
//
1.对Rest调用传来的Header的路由Version做策略。注意这个Version不是灰度发布的Version
boolean
enabled
=
super
.
apply
(
server
,
metadata
);
//
对Rest调用传来的Header参数(例如Token)做策略
boolean
enabled
=
applyFromHeader
(
server
,
metadata
);
if
(!
enabled
)
{
return
false
;
}
// 2.对Rest调用传来的Header参数(例如Token)做策略
enabled
=
applyFromHeader
(
server
,
metadata
);
if
(!
enabled
)
{
return
false
;
}
// 3.对RPC调用传来的方法参数做策略
// 对RPC调用传来的方法参数做策略
return
applyFromMethd
(
server
,
metadata
);
}
...
...
discovery-springcloud-example-zuul/src/main/java/com/nepxion/discovery/plugin/example/zuul/DiscoveryApplicationZuul.java
View file @
e53c12c0
...
...
@@ -15,7 +15,7 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import
org.springframework.cloud.netflix.zuul.EnableZuulProxy
;
import
org.springframework.context.annotation.Bean
;
import
com.nepxion.discovery.plugin.example.zuul.extension.MyDiscoveryEnabled
Adapter
;
import
com.nepxion.discovery.plugin.example.zuul.extension.MyDiscoveryEnabled
Extension
;
@SpringBootApplication
@EnableDiscoveryClient
...
...
@@ -26,7 +26,7 @@ public class DiscoveryApplicationZuul {
}
@Bean
public
MyDiscoveryEnabled
Adapter
myDiscoveryEnabledAdapter
()
{
return
new
MyDiscoveryEnabled
Adapter
();
public
MyDiscoveryEnabled
Extension
myDiscoveryEnabledExtension
()
{
return
new
MyDiscoveryEnabled
Extension
();
}
}
\ No newline at end of file
discovery-springcloud-example-zuul/src/main/java/com/nepxion/discovery/plugin/example/zuul/extension/MyDiscoveryEnabled
Adapter
.java
→
discovery-springcloud-example-zuul/src/main/java/com/nepxion/discovery/plugin/example/zuul/extension/MyDiscoveryEnabled
Extension
.java
View file @
e53c12c0
...
...
@@ -15,24 +15,17 @@ import org.apache.commons.lang3.StringUtils;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.nepxion.discovery.plugin.strategy.
extension.zuul.impl.VersionDiscoveryEnabledAdapter
;
import
com.nepxion.discovery.plugin.strategy.
discovery.DiscoveryEnabledExtension
;
import
com.netflix.loadbalancer.Server
;
import
com.netflix.zuul.context.RequestContext
;
// 实现了组合策略,版本路由策略+自定义策略
// 如果不想要版本路由策略,请直接implements DiscoveryEnabledAdapter,实现自定义策略
public
class
MyDiscoveryEnabledAdapter
extends
VersionDiscoveryEnabledAdapter
{
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
MyDiscoveryEnabledAdapter
.
class
);
public
class
MyDiscoveryEnabledExtension
implements
DiscoveryEnabledExtension
{
private
static
final
Logger
LOG
=
LoggerFactory
.
getLogger
(
MyDiscoveryEnabledExtension
.
class
);
@Override
public
boolean
apply
(
Server
server
,
Map
<
String
,
String
>
metadata
)
{
// 1.对Rest调用传来的Header的路由Version做策略。注意这个Version不是灰度发布的Version
boolean
enabled
=
super
.
apply
(
server
,
metadata
);
if
(!
enabled
)
{
return
false
;
}
// 2.对Rest调用传来的Header参数(例如Token)做策略
// 对Rest调用传来的Header参数(例如Token)做策略
return
applyFromHeader
(
server
,
metadata
);
}
...
...
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