Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
midjourney-proxy
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
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
徐少华
midjourney-proxy
Commits
2001679c
Commit
2001679c
authored
Dec 24, 2019
by
裴大威
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat gray
parent
61b5e41f
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
139 additions
and
0 deletions
+139
-0
GrayRibbonConfig.java
...in/java/com/pcloud/common/core/rule/GrayRibbonConfig.java
+26
-0
GrayRule.java
...e/src/main/java/com/pcloud/common/core/rule/GrayRule.java
+84
-0
RibbonClientConfig.java
.../java/com/pcloud/common/core/rule/RibbonClientConfig.java
+22
-0
pom.xml
pcloud-common/pom.xml
+7
-0
No files found.
pcloud-common-core/src/main/java/com/pcloud/common/core/rule/GrayRibbonConfig.java
0 → 100644
View file @
2001679c
package
com
.
pcloud
.
common
.
core
.
rule
;
import
com.dcg.util.annotation.ExcludeFromComponetScan
;
import
com.netflix.loadbalancer.IRule
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
lombok.extern.slf4j.Slf4j
;
/**
* ribbon要排除在ComponentScan之外故新建此包 by david
*/
@Slf4j
@Configuration
@ExcludeFromComponetScan
public
class
GrayRibbonConfig
{
@Bean
public
IRule
grayRule
()
{
log
.
info
(
"---customize gray publish---"
);
return
new
GrayRule
();
}
}
pcloud-common-core/src/main/java/com/pcloud/common/core/rule/GrayRule.java
0 → 100644
View file @
2001679c
package
com
.
pcloud
.
common
.
core
.
rule
;
import
com.dcg.util.constant.GrayConstants
;
import
com.netflix.loadbalancer.ILoadBalancer
;
import
com.netflix.loadbalancer.Server
;
import
com.netflix.loadbalancer.ZoneAvoidanceRule
;
import
com.pcloud.common.utils.cache.redis.JedisClusterUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.concurrent.ThreadLocalRandom
;
import
lombok.extern.slf4j.Slf4j
;
/**
* 自定义灰度发布规则 2019-11-19 by david
*/
@Slf4j
@Service
public
class
GrayRule
extends
ZoneAvoidanceRule
{
/**
* 在choose方法中,自定义规则,返回的Server就是具体选择出来的服务
*
* @param key 服务key
* @return 可用server
*/
@Override
public
Server
choose
(
Object
key
)
{
ILoadBalancer
loadBalancer
=
this
.
getLoadBalancer
();
List
<
Server
>
allServers
=
loadBalancer
.
getAllServers
();
List
<
Server
>
serverList
=
this
.
getPredicate
().
getEligibleServers
(
allServers
,
key
);
log
.
info
(
"[gray choose] key:{}; allServers:{}; serverList:{}"
,
key
,
allServers
,
serverList
);
if
(
CollectionUtils
.
isEmpty
(
serverList
))
{
log
.
warn
(
"=====GrayRule choose serverList isEmpty key:{}====="
,
key
);
return
null
;
}
// 灰度开关
String
switchValue
=
JedisClusterUtils
.
get
(
GrayConstants
.
GRAY_SWITCH
);
if
(
StringUtils
.
isBlank
(
switchValue
)
||
"0"
.
equals
(
switchValue
))
{
return
getRandom
(
serverList
);
}
// 灰度服务列表
final
Map
<
String
,
String
>
grayAddress
=
JedisClusterUtils
.
hgetAll
(
GrayConstants
.
GRAY_ADDRESS
);
if
(
CollectionUtils
.
isEmpty
(
grayAddress
))
{
log
.
info
(
"[choose] : grayAddress isEmpty return serverList:{}"
,
serverList
);
return
getRandom
(
serverList
);
}
List
<
String
>
grayServers
=
new
ArrayList
<>(
grayAddress
.
keySet
());
// 查找非灰度服务并返回
List
<
Server
>
noGrayServerList
=
new
ArrayList
<>();
for
(
Server
server
:
serverList
)
{
// 过滤正在发布的服务
if
(
grayServers
.
contains
(
server
.
getHostPort
()))
{
continue
;
}
noGrayServerList
.
add
(
server
);
}
if
(!
noGrayServerList
.
isEmpty
())
{
return
getRandom
(
noGrayServerList
);
}
return
null
;
}
/**
* 随机返回一个可用服务
*
* @param serverList 服务列表
* @return 随机获取的服务
*/
private
static
Server
getRandom
(
List
<
Server
>
serverList
)
{
if
(
CollectionUtils
.
isEmpty
(
serverList
))
{
return
null
;
}
ThreadLocalRandom
random
=
ThreadLocalRandom
.
current
();
return
serverList
.
get
(
random
.
nextInt
(
serverList
.
size
()));
}
}
pcloud-common-core/src/main/java/com/pcloud/common/core/rule/RibbonClientConfig.java
0 → 100644
View file @
2001679c
package
com
.
pcloud
.
common
.
core
.
rule
;
import
com.netflix.client.config.IClientConfig
;
import
com.netflix.loadbalancer.ConfigurationBasedServerList
;
import
org.springframework.cloud.netflix.ribbon.RibbonClients
;
import
lombok.extern.slf4j.Slf4j
;
/**
* 自定义灰度策略
*/
@Slf4j
@RibbonClients
(
defaultConfiguration
=
GrayRibbonConfig
.
class
)
public
class
RibbonClientConfig
{
public
static
class
BazServiceList
extends
ConfigurationBasedServerList
{
public
BazServiceList
(
IClientConfig
config
)
{
super
.
initWithNiwsConfig
(
config
);
}
}
}
pcloud-common/pom.xml
View file @
2001679c
...
...
@@ -388,6 +388,13 @@
<artifactId>
lombok
</artifactId>
</dependency>
<!-- util sdk -->
<dependency>
<groupId>
com.dcg.sdk
</groupId>
<artifactId>
util-sdk
</artifactId>
<version>
1.0.1
</version>
</dependency>
</dependencies>
</project>
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