Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
喜欢杯子
microservices-platform
提交
b060d8ee
microservices-platform
项目概览
喜欢杯子
/
microservices-platform
与 Fork 源项目一致
Fork自
whatyn / microservices-platform
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
microservices-platform
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
b060d8ee
编写于
9月 04, 2019
作者:
zlt2000
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加自定义负载均衡规则,实现服务实例版本号隔离
上级
1c17de32
变更
15
隐藏空白更改
内联
并排
Showing
15 changed file
with
254 addition
and
5 deletion
+254
-5
zlt-business/user-center/src/main/resources/bootstrap.yml
zlt-business/user-center/src/main/resources/bootstrap.yml
+3
-1
zlt-commons/zlt-common-spring-boot-starter/src/main/java/com/central/common/config/DefaultWebMvcConfig.java
...n/java/com/central/common/config/DefaultWebMvcConfig.java
+19
-2
zlt-commons/zlt-common-spring-boot-starter/src/main/java/com/central/common/constant/CommonConstant.java
...main/java/com/central/common/constant/CommonConstant.java
+8
-0
zlt-commons/zlt-common-spring-boot-starter/src/main/java/com/central/common/constant/ConfigConstants.java
...ain/java/com/central/common/constant/ConfigConstants.java
+14
-0
zlt-commons/zlt-common-spring-boot-starter/src/main/java/com/central/common/context/LbIsolationContextHolder.java
.../com/central/common/context/LbIsolationContextHolder.java
+25
-0
zlt-commons/zlt-common-spring-boot-starter/src/main/java/com/central/common/interceptor/LbIsolationInterceptor.java
...om/central/common/interceptor/LbIsolationInterceptor.java
+26
-0
zlt-commons/zlt-ribbon-spring-boot-starter/pom.xml
zlt-commons/zlt-ribbon-spring-boot-starter/pom.xml
+5
-0
zlt-commons/zlt-ribbon-spring-boot-starter/src/main/java/com/central/common/ribbon/RibbonAutoConfigure.java
...n/java/com/central/common/ribbon/RibbonAutoConfigure.java
+12
-1
zlt-commons/zlt-ribbon-spring-boot-starter/src/main/java/com/central/common/ribbon/config/FeignInterceptorConfig.java
.../central/common/ribbon/config/FeignInterceptorConfig.java
+1
-0
zlt-commons/zlt-ribbon-spring-boot-starter/src/main/java/com/central/common/ribbon/config/RuleConfigure.java
.../java/com/central/common/ribbon/config/RuleConfigure.java
+16
-0
zlt-commons/zlt-ribbon-spring-boot-starter/src/main/java/com/central/common/ribbon/rule/CustomIsolationRule.java
...a/com/central/common/ribbon/rule/CustomIsolationRule.java
+64
-0
zlt-config/src/main/resources/application-dev.properties
zlt-config/src/main/resources/application-dev.properties
+4
-1
zlt-gateway/zuul-gateway/src/main/java/com/central/gateway/filter/pre/LbIsolationFilter.java
...ava/com/central/gateway/filter/pre/LbIsolationFilter.java
+52
-0
zlt-web/back-web/src/main/resources/static/module/admin.js
zlt-web/back-web/src/main/resources/static/module/admin.js
+4
-0
zlt-web/back-web/src/main/resources/static/module/config.js
zlt-web/back-web/src/main/resources/static/module/config.js
+1
-0
未找到文件。
zlt-business/user-center/src/main/resources/bootstrap.yml
浏览文件 @
b060d8ee
...
...
@@ -16,4 +16,6 @@ spring:
shared-dataids
:
common.yml
refreshable-dataids
:
common.yml
discovery
:
server-addr
:
${zlt.nacos.server-addr}
\ No newline at end of file
server-addr
:
${zlt.nacos.server-addr}
# metadata:
# version: zlt
\ No newline at end of file
zlt-commons/zlt-common-spring-boot-starter/src/main/java/com/central/common/config/DefaultWebMvcConfig.java
浏览文件 @
b060d8ee
package
com.central.common.config
;
import
com.central.common.constant.ConfigConstants
;
import
com.central.common.feign.UserService
;
import
com.central.common.interceptor.LbIsolationInterceptor
;
import
com.central.common.interceptor.TenantInterceptor
;
import
com.central.common.interceptor.TraceInterceptor
;
import
com.central.common.resolver.ClientArgumentResolver
;
import
com.central.common.resolver.TokenArgumentResolver
;
import
com.central.log.properties.TraceProperties
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.web.method.support.HandlerMethodArgumentResolver
;
import
org.springframework.web.servlet.config.annotation.InterceptorRegistry
;
import
org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry
;
...
...
@@ -23,6 +27,12 @@ public class DefaultWebMvcConfig extends WebMvcConfigurationSupport {
@Autowired
private
UserService
userService
;
@Autowired
private
TraceProperties
traceProperties
;
@Value
(
"${"
+
ConfigConstants
.
CONFIG_RIBBON_ISOLATION_ENABLED
+
":false}"
)
private
boolean
enableIsolation
;
/**
* 配置SpringMVC拦截器,添加租户拦截器
*/
...
...
@@ -31,8 +41,15 @@ public class DefaultWebMvcConfig extends WebMvcConfigurationSupport {
//租户拦截器
registry
.
addInterceptor
(
new
TenantInterceptor
()).
addPathPatterns
(
"/**"
);
//日志链路追踪拦截器
registry
.
addInterceptor
(
new
TraceInterceptor
()).
addPathPatterns
(
"/**"
);
if
(
traceProperties
.
getEnable
())
{
//日志链路追踪拦截器
registry
.
addInterceptor
(
new
TraceInterceptor
()).
addPathPatterns
(
"/**"
);
}
if
(
enableIsolation
)
{
//负债均衡隔离规则拦截器
registry
.
addInterceptor
(
new
LbIsolationInterceptor
()).
addPathPatterns
(
"/**"
);
}
super
.
addInterceptors
(
registry
);
}
...
...
zlt-commons/zlt-common-spring-boot-starter/src/main/java/com/central/common/constant/CommonConstant.java
浏览文件 @
b060d8ee
...
...
@@ -117,4 +117,12 @@ public interface CommonConstant {
* 日志链路追踪id日志标志
*/
String
LOG_TRACE_ID
=
"traceId"
;
/**
* 负载均衡策略-版本号 信息头
*/
String
Z_L_T_VERSION
=
"z-l-t-version"
;
/**
* 注册中心元数据 版本号
*/
String
METADATA_VERSION
=
"version"
;
}
zlt-commons/zlt-common-spring-boot-starter/src/main/java/com/central/common/constant/ConfigConstants.java
0 → 100644
浏览文件 @
b060d8ee
package
com.central.common.constant
;
/**
* 配置项常量
*
* @author zlt
* @date 2019/9/3
*/
public
interface
ConfigConstants
{
/**
* 是否开启自定义隔离规则
*/
String
CONFIG_RIBBON_ISOLATION_ENABLED
=
"zlt.ribbon.isolation.enabled"
;
}
zlt-commons/zlt-common-spring-boot-starter/src/main/java/com/central/common/context/LbIsolationContextHolder.java
0 → 100644
浏览文件 @
b060d8ee
package
com.central.common.context
;
import
com.alibaba.ttl.TransmittableThreadLocal
;
/**
* 负载均衡策略Holder
*
* @author zlt
* @date 2019/9/2
*/
public
class
LbIsolationContextHolder
{
private
static
final
ThreadLocal
<
String
>
VERSION_CONTEXT
=
new
TransmittableThreadLocal
<>();
public
static
void
setVersion
(
String
version
)
{
VERSION_CONTEXT
.
set
(
version
);
}
public
static
String
getVersion
()
{
return
VERSION_CONTEXT
.
get
();
}
public
static
void
clear
()
{
VERSION_CONTEXT
.
remove
();
}
}
zlt-commons/zlt-common-spring-boot-starter/src/main/java/com/central/common/interceptor/LbIsolationInterceptor.java
0 → 100644
浏览文件 @
b060d8ee
package
com.central.common.interceptor
;
import
cn.hutool.core.util.StrUtil
;
import
com.central.common.constant.CommonConstant
;
import
com.central.common.context.LbIsolationContextHolder
;
import
org.springframework.web.servlet.HandlerInterceptor
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
/**
* 负载均衡隔离规则截器
*
* @author zlt
* @date 2019/8/5
*/
public
class
LbIsolationInterceptor
implements
HandlerInterceptor
{
@Override
public
boolean
preHandle
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
handler
)
{
String
version
=
request
.
getHeader
(
CommonConstant
.
Z_L_T_VERSION
);
if
(
StrUtil
.
isNotEmpty
(
version
)){
LbIsolationContextHolder
.
setVersion
(
version
);
}
return
true
;
}
}
zlt-commons/zlt-ribbon-spring-boot-starter/pom.xml
浏览文件 @
b060d8ee
...
...
@@ -24,6 +24,11 @@
<groupId>
org.springframework.cloud
</groupId>
<artifactId>
spring-cloud-starter-netflix-ribbon
</artifactId>
</dependency>
<dependency>
<groupId>
com.alibaba.cloud
</groupId>
<artifactId>
spring-cloud-starter-alibaba-nacos-discovery
</artifactId>
<optional>
true
</optional>
</dependency>
<dependency>
<groupId>
org.apache.httpcomponents
</groupId>
<artifactId>
httpclient
</artifactId>
...
...
zlt-commons/zlt-ribbon-spring-boot-starter/src/main/java/com/central/common/ribbon/RibbonAutoConfigure.java
浏览文件 @
b060d8ee
package
com.central.common.ribbon
;
import
com.central.common.constant.ConfigConstants
;
import
com.central.common.ribbon.config.RestTemplateProperties
;
import
com.central.common.ribbon.config.RuleConfigure
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
import
org.springframework.cloud.netflix.ribbon.DefaultPropertiesFactory
;
import
org.springframework.cloud.netflix.ribbon.RibbonClients
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
/**
* Ribbon扩展配置类
...
...
@@ -12,9 +17,15 @@ import org.springframework.context.annotation.Bean;
* @date 2018/11/17 9:24
*/
@EnableConfigurationProperties
(
RestTemplateProperties
.
class
)
public
class
RibbonAutoConfigure
{
public
class
RibbonAutoConfigure
{
@Bean
public
DefaultPropertiesFactory
defaultPropertiesFactory
()
{
return
new
DefaultPropertiesFactory
();
}
@Configuration
@ConditionalOnProperty
(
value
=
ConfigConstants
.
CONFIG_RIBBON_ISOLATION_ENABLED
,
havingValue
=
"true"
)
@RibbonClients
(
defaultConfiguration
=
{
RuleConfigure
.
class
})
public
class
LbIsolationConfig
{
}
}
zlt-commons/zlt-ribbon-spring-boot-starter/src/main/java/com/central/common/ribbon/config/FeignInterceptorConfig.java
浏览文件 @
b060d8ee
...
...
@@ -29,6 +29,7 @@ public class FeignInterceptorConfig {
requestHeaders
.
add
(
SecurityConstants
.
USER_ID_HEADER
);
requestHeaders
.
add
(
SecurityConstants
.
USER_HEADER
);
requestHeaders
.
add
(
SecurityConstants
.
ROLE_HEADER
);
requestHeaders
.
add
(
CommonConstant
.
Z_L_T_VERSION
);
}
/**
...
...
zlt-commons/zlt-ribbon-spring-boot-starter/src/main/java/com/central/common/ribbon/config/RuleConfigure.java
0 → 100644
浏览文件 @
b060d8ee
package
com.central.common.ribbon.config
;
import
com.central.common.ribbon.rule.CustomIsolationRule
;
import
com.netflix.loadbalancer.IRule
;
import
org.springframework.context.annotation.Bean
;
/**
* @author zlt
* @date 2019/9/3
*/
public
class
RuleConfigure
{
@Bean
public
IRule
isolationRule
()
{
return
new
CustomIsolationRule
();
}
}
zlt-commons/zlt-ribbon-spring-boot-starter/src/main/java/com/central/common/ribbon/rule/CustomIsolationRule.java
0 → 100644
浏览文件 @
b060d8ee
package
com.central.common.ribbon.rule
;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.util.RandomUtil
;
import
cn.hutool.core.util.StrUtil
;
import
com.alibaba.cloud.nacos.ribbon.NacosServer
;
import
com.central.common.constant.CommonConstant
;
import
com.central.common.context.LbIsolationContextHolder
;
import
com.netflix.loadbalancer.*
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
* 自定义隔离随机规则
*
* @author zlt
* @date 2019/9/3
*/
public
class
CustomIsolationRule
extends
RoundRobinRule
{
/**
* 优先根据版本号取实例
*/
@Override
public
Server
choose
(
ILoadBalancer
lb
,
Object
key
)
{
if
(
lb
==
null
)
{
return
null
;
}
String
version
=
LbIsolationContextHolder
.
getVersion
();
List
<
Server
>
targetList
=
null
;
List
<
Server
>
upList
=
lb
.
getReachableServers
();
if
(
StrUtil
.
isNotEmpty
(
version
))
{
//取指定版本号的实例
targetList
=
upList
.
stream
().
filter
(
server
->
version
.
equals
(
((
NacosServer
)
server
).
getMetadata
().
get
(
CommonConstant
.
METADATA_VERSION
)
)
).
collect
(
Collectors
.
toList
());
}
if
(
CollUtil
.
isEmpty
(
targetList
))
{
//只取无版本号的实例
targetList
=
upList
.
stream
().
filter
(
server
->
{
String
metadataVersion
=
((
NacosServer
)
server
).
getMetadata
().
get
(
CommonConstant
.
METADATA_VERSION
);
return
StrUtil
.
isEmpty
(
metadataVersion
);
}
).
collect
(
Collectors
.
toList
());
}
if
(
CollUtil
.
isNotEmpty
(
targetList
))
{
return
getServer
(
targetList
);
}
return
super
.
choose
(
lb
,
key
);
}
/**
* 随机取一个实例
*/
private
Server
getServer
(
List
<
Server
>
upList
)
{
int
nextInt
=
RandomUtil
.
randomInt
(
upList
.
size
());
return
upList
.
get
(
nextInt
);
}
}
zlt-config/src/main/resources/application-dev.properties
浏览文件 @
b060d8ee
...
...
@@ -21,4 +21,7 @@ zlt.fdfs.web-url=192.168.28.130
zlt.fdfs.trackerList
=
${zlt.fdfs.web-url}:22122
##### 日志链路追踪
zlt.trace.enable
=
true
\ No newline at end of file
zlt.trace.enable
=
true
##### 负载均衡隔离(version隔离,只适用于开发环境)
zlt.ribbon.isolation.enabled
=
true
\ No newline at end of file
zlt-gateway/zuul-gateway/src/main/java/com/central/gateway/filter/pre/LbIsolationFilter.java
0 → 100644
浏览文件 @
b060d8ee
package
com.central.gateway.filter.pre
;
import
cn.hutool.core.util.StrUtil
;
import
com.central.common.constant.CommonConstant
;
import
com.central.common.constant.ConfigConstants
;
import
com.central.common.context.LbIsolationContextHolder
;
import
com.netflix.zuul.ZuulFilter
;
import
com.netflix.zuul.context.RequestContext
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.cloud.netflix.zuul.filters.support.FilterConstants
;
import
org.springframework.stereotype.Component
;
/**
* 保存负载均衡隔离值
*
* @author zlt
* @date 2019/8/13
*/
@Component
public
class
LbIsolationFilter
extends
ZuulFilter
{
@Value
(
"${"
+
ConfigConstants
.
CONFIG_RIBBON_ISOLATION_ENABLED
+
":false}"
)
private
boolean
enableIsolation
;
@Override
public
String
filterType
()
{
return
FilterConstants
.
PRE_TYPE
;
}
@Override
public
int
filterOrder
()
{
return
0
;
}
@Override
public
boolean
shouldFilter
()
{
//根据配置控制是否开启过滤器
return
enableIsolation
;
}
@Override
public
Object
run
()
{
RequestContext
ctx
=
RequestContext
.
getCurrentContext
();
String
version
=
ctx
.
getRequest
().
getHeader
(
CommonConstant
.
Z_L_T_VERSION
);
if
(
StrUtil
.
isNotEmpty
(
version
))
{
LbIsolationContextHolder
.
setVersion
(
version
);
}
else
{
LbIsolationContextHolder
.
clear
();
}
return
null
;
}
}
zlt-web/back-web/src/main/resources/static/module/admin.js
浏览文件 @
b060d8ee
...
...
@@ -105,6 +105,10 @@ layui.define(['config', 'layer'], function (exports) {
xhr
.
setRequestHeader
(
'
Authorization
'
,
'
bearer
'
+
token
.
access_token
);
}
}
let
isolationVersion
=
config
.
isolationVersion
;
if
(
isolationVersion
)
{
xhr
.
setRequestHeader
(
'
z-l-t-version
'
,
isolationVersion
);
}
}
});
},
...
...
zlt-web/back-web/src/main/resources/static/module/config.js
浏览文件 @
b060d8ee
...
...
@@ -19,6 +19,7 @@ layui.define(function (exports) {
base_server
:
apiUrl
,
tableName
:
'
easyweb
'
,
// 存储表名
clientId
:
'
webApp
'
,
// 应用id
isolationVersion
:
''
,
// 隔离版本
clientSecret
:
'
webApp
'
,
// 应用秘钥
autoRender
:
false
,
// 窗口大小改变后是否自动重新渲染表格,解决layui数据表格非响应式的问题,目前实现的还不是很好,暂时关闭该功能
pageTabs
:
true
,
// 是否开启多标签
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录