Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
zhangjian1949
microservices-platform
提交
3b91e9d9
microservices-platform
项目概览
zhangjian1949
/
microservices-platform
与 Fork 源项目一致
Fork自
zlt2000 / microservices-platform
通知
6
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 搜索 >>
提交
3b91e9d9
编写于
9月 15, 2019
作者:
zlt2000
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
优化租户、trace等数据传递方式,由拦截器改为过滤器
上级
dd0fe108
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
144 addition
and
126 deletion
+144
-126
zlt-commons/zlt-common-spring-boot-starter/src/main/java/com/central/common/config/DefaultWebMvcConfig.java
...n/java/com/central/common/config/DefaultWebMvcConfig.java
+0
-34
zlt-commons/zlt-common-spring-boot-starter/src/main/java/com/central/common/filter/TenantFilter.java
...src/main/java/com/central/common/filter/TenantFilter.java
+41
-0
zlt-commons/zlt-common-spring-boot-starter/src/main/java/com/central/common/filter/TraceFilter.java
.../src/main/java/com/central/common/filter/TraceFilter.java
+45
-0
zlt-commons/zlt-common-spring-boot-starter/src/main/java/com/central/common/interceptor/LbIsolationInterceptor.java
...om/central/common/interceptor/LbIsolationInterceptor.java
+0
-26
zlt-commons/zlt-common-spring-boot-starter/src/main/java/com/central/common/interceptor/TenantInterceptor.java
...ava/com/central/common/interceptor/TenantInterceptor.java
+0
-34
zlt-commons/zlt-common-spring-boot-starter/src/main/java/com/central/common/interceptor/TraceInterceptor.java
...java/com/central/common/interceptor/TraceInterceptor.java
+0
-26
zlt-commons/zlt-common-spring-boot-starter/src/main/resources/META-INF/spring.factories
...boot-starter/src/main/resources/META-INF/spring.factories
+5
-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
-2
zlt-commons/zlt-ribbon-spring-boot-starter/src/main/java/com/central/common/ribbon/filter/LbIsolationFilter.java
...a/com/central/common/ribbon/filter/LbIsolationFilter.java
+45
-0
zlt-commons/zlt-ribbon-spring-boot-starter/src/main/resources/META-INF/spring.factories
...boot-starter/src/main/resources/META-INF/spring.factories
+2
-1
zlt-demo/seata-demo/README.md
zlt-demo/seata-demo/README.md
+5
-2
未找到文件。
zlt-commons/zlt-common-spring-boot-starter/src/main/java/com/central/common/config/DefaultWebMvcConfig.java
浏览文件 @
3b91e9d9
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.context.annotation.Lazy
;
import
org.springframework.web.method.support.HandlerMethodArgumentResolver
;
import
org.springframework.web.servlet.config.annotation.InterceptorRegistry
;
import
org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry
;
import
org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport
;
...
...
@@ -29,33 +22,6 @@ public class DefaultWebMvcConfig extends WebMvcConfigurationSupport {
@Autowired
private
UserService
userService
;
@Autowired
private
TraceProperties
traceProperties
;
@Value
(
"${"
+
ConfigConstants
.
CONFIG_RIBBON_ISOLATION_ENABLED
+
":false}"
)
private
boolean
enableIsolation
;
/**
* 配置SpringMVC拦截器,添加租户拦截器
*/
@Override
protected
void
addInterceptors
(
InterceptorRegistry
registry
)
{
//租户拦截器
registry
.
addInterceptor
(
new
TenantInterceptor
()).
addPathPatterns
(
"/**"
);
if
(
traceProperties
.
getEnable
())
{
//日志链路追踪拦截器
registry
.
addInterceptor
(
new
TraceInterceptor
()).
addPathPatterns
(
"/**"
);
}
if
(
enableIsolation
)
{
//负债均衡隔离规则拦截器
registry
.
addInterceptor
(
new
LbIsolationInterceptor
()).
addPathPatterns
(
"/**"
);
}
super
.
addInterceptors
(
registry
);
}
/**
* Token参数解析
*
...
...
zlt-commons/zlt-common-spring-boot-starter/src/main/java/com/central/common/filter/TenantFilter.java
0 → 100644
浏览文件 @
3b91e9d9
package
com.central.common.filter
;
import
cn.hutool.core.util.StrUtil
;
import
com.central.common.constant.CommonConstant
;
import
com.central.common.constant.SecurityConstants
;
import
com.central.common.context.TenantContextHolder
;
import
org.springframework.web.filter.OncePerRequestFilter
;
import
javax.servlet.FilterChain
;
import
javax.servlet.ServletException
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
/**
* 租户过滤器
*
* @author zlt
* @date 2019/9/15
*/
public
class
TenantFilter
extends
OncePerRequestFilter
{
@Override
protected
void
doFilterInternal
(
HttpServletRequest
request
,
HttpServletResponse
response
,
FilterChain
filterChain
)
throws
IOException
,
ServletException
{
try
{
//优先获取请求参数中的tenantId值
String
tenantId
=
request
.
getParameter
(
CommonConstant
.
TENANT_ID_PARAM
);
if
(
StrUtil
.
isEmpty
(
tenantId
))
{
tenantId
=
request
.
getHeader
(
SecurityConstants
.
TENANT_HEADER
);
}
//保存租户id
if
(
StrUtil
.
isEmpty
(
tenantId
))
{
TenantContextHolder
.
setTenant
(
tenantId
);
}
filterChain
.
doFilter
(
request
,
response
);
}
finally
{
TenantContextHolder
.
clear
();
}
}
}
zlt-commons/zlt-common-spring-boot-starter/src/main/java/com/central/common/filter/TraceFilter.java
0 → 100644
浏览文件 @
3b91e9d9
package
com.central.common.filter
;
import
cn.hutool.core.util.StrUtil
;
import
com.central.common.constant.CommonConstant
;
import
com.central.log.properties.TraceProperties
;
import
org.slf4j.MDC
;
import
org.springframework.web.filter.OncePerRequestFilter
;
import
javax.annotation.Resource
;
import
javax.servlet.FilterChain
;
import
javax.servlet.ServletException
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
/**
* 日志链路追踪过滤器
*
* @author zlt
* @date 2019/9/15
*/
public
class
TraceFilter
extends
OncePerRequestFilter
{
@Resource
private
TraceProperties
traceProperties
;
@Override
protected
boolean
shouldNotFilter
(
HttpServletRequest
request
)
{
return
!
traceProperties
.
getEnable
();
}
@Override
protected
void
doFilterInternal
(
HttpServletRequest
request
,
HttpServletResponse
response
,
FilterChain
filterChain
)
throws
IOException
,
ServletException
{
try
{
String
traceId
=
request
.
getHeader
(
CommonConstant
.
TRACE_ID_HEADER
);
if
(
StrUtil
.
isNotEmpty
(
traceId
))
{
MDC
.
put
(
CommonConstant
.
LOG_TRACE_ID
,
traceId
);
}
filterChain
.
doFilter
(
request
,
response
);
}
finally
{
MDC
.
clear
();
}
}
}
zlt-commons/zlt-common-spring-boot-starter/src/main/java/com/central/common/interceptor/LbIsolationInterceptor.java
已删除
100644 → 0
浏览文件 @
dd0fe108
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-common-spring-boot-starter/src/main/java/com/central/common/interceptor/TenantInterceptor.java
已删除
100644 → 0
浏览文件 @
dd0fe108
package
com.central.common.interceptor
;
import
cn.hutool.core.util.StrUtil
;
import
com.central.common.constant.CommonConstant
;
import
com.central.common.constant.SecurityConstants
;
import
com.central.common.context.TenantContextHolder
;
import
org.springframework.web.servlet.HandlerInterceptor
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
/**
* 租户拦截器
*
* @author zlt
* @date 2019/8/5
*/
public
class
TenantInterceptor
implements
HandlerInterceptor
{
@Override
public
boolean
preHandle
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
handler
)
{
//优先获取请求参数中的tenantId值
String
tenantId
=
request
.
getParameter
(
CommonConstant
.
TENANT_ID_PARAM
);
if
(
StrUtil
.
isEmpty
(
tenantId
))
{
tenantId
=
request
.
getHeader
(
SecurityConstants
.
TENANT_HEADER
);
}
//保存租户id
if
(
StrUtil
.
isNotEmpty
(
tenantId
)){
TenantContextHolder
.
setTenant
(
tenantId
);
}
else
{
TenantContextHolder
.
clear
();
}
return
true
;
}
}
zlt-commons/zlt-common-spring-boot-starter/src/main/java/com/central/common/interceptor/TraceInterceptor.java
已删除
100644 → 0
浏览文件 @
dd0fe108
package
com.central.common.interceptor
;
import
cn.hutool.core.util.StrUtil
;
import
com.central.common.constant.CommonConstant
;
import
org.slf4j.MDC
;
import
org.springframework.web.servlet.HandlerInterceptor
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
/**
* 日志链路追踪拦截器
*
* @author zlt
* @date 2019/8/13
*/
public
class
TraceInterceptor
implements
HandlerInterceptor
{
@Override
public
boolean
preHandle
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
handler
)
{
String
traceId
=
request
.
getHeader
(
CommonConstant
.
TRACE_ID_HEADER
);
if
(
StrUtil
.
isNotEmpty
(
traceId
))
{
MDC
.
put
(
CommonConstant
.
LOG_TRACE_ID
,
traceId
);
}
return
true
;
}
}
zlt-commons/zlt-common-spring-boot-starter/src/main/resources/META-INF/spring.factories
浏览文件 @
3b91e9d9
org.springframework.context.ApplicationContextInitializer=\
com.central.common.config.BannerInitializer
\ No newline at end of file
com.central.common.config.BannerInitializer
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.central.common.filter.TenantFilter,\
com.central.common.filter.TraceFilter
\ No newline at end of file
zlt-commons/zlt-ribbon-spring-boot-starter/src/main/java/com/central/common/ribbon/config/FeignInterceptorConfig.java
浏览文件 @
3b91e9d9
...
...
@@ -37,7 +37,7 @@ public class FeignInterceptorConfig {
*/
@Bean
public
RequestInterceptor
requestInterceptor
()
{
RequestInterceptor
requestInterceptor
=
template
->
{
return
template
->
{
ServletRequestAttributes
attributes
=
(
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
();
if
(
attributes
!=
null
)
{
...
...
@@ -77,7 +77,6 @@ public class FeignInterceptorConfig {
template
.
header
(
CommonConstant
.
TRACE_ID_HEADER
,
traceId
);
}
};
return
requestInterceptor
;
}
/**
...
...
zlt-commons/zlt-ribbon-spring-boot-starter/src/main/java/com/central/common/ribbon/filter/LbIsolationFilter.java
0 → 100644
浏览文件 @
3b91e9d9
package
com.central.common.ribbon.filter
;
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
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.web.filter.OncePerRequestFilter
;
import
javax.servlet.FilterChain
;
import
javax.servlet.ServletException
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
/**
* 负载均衡隔离规则过滤器
*
* @author zlt
* @date 2019/9/15
*/
public
class
LbIsolationFilter
extends
OncePerRequestFilter
{
@Value
(
"${"
+
ConfigConstants
.
CONFIG_RIBBON_ISOLATION_ENABLED
+
":false}"
)
private
boolean
enableIsolation
;
@Override
protected
boolean
shouldNotFilter
(
HttpServletRequest
request
)
{
return
!
enableIsolation
;
}
@Override
protected
void
doFilterInternal
(
HttpServletRequest
request
,
HttpServletResponse
response
,
FilterChain
filterChain
)
throws
IOException
,
ServletException
{
try
{
String
version
=
request
.
getHeader
(
CommonConstant
.
Z_L_T_VERSION
);
if
(
StrUtil
.
isNotEmpty
(
version
)){
LbIsolationContextHolder
.
setVersion
(
version
);
}
filterChain
.
doFilter
(
request
,
response
);
}
finally
{
LbIsolationContextHolder
.
clear
();
}
}
}
zlt-commons/zlt-ribbon-spring-boot-starter/src/main/resources/META-INF/spring.factories
浏览文件 @
3b91e9d9
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.central.common.ribbon.RibbonAutoConfigure,\
com.central.common.ribbon.FeignAutoConfigure,\
com.central.common.ribbon.RestTemplateAutoConfigure
com.central.common.ribbon.RestTemplateAutoConfigure,\
com.central.common.ribbon.filter.LbIsolationFilter
zlt-demo/seata-demo/README.md
浏览文件 @
3b91e9d9
...
...
@@ -13,8 +13,11 @@
**提供以下两个测试接口**
1.
`http://localhost:9090/placeOrder`
:成功下单
2.
`http://localhost:9090/placeOrder`
:测试异常回滚,
`storage-service`
和
`order-service`
的事务已提交,
`account-service`
出异常后全局回滚
1.
事务成功:扣除库存成功 > 创建订单成功 > 扣减账户余额成功
http://localhost:9090/placeOrder
1.
事务失败:扣除库存成功 > 创建订单成功 > 扣减账户余额失败,事务回滚
http://localhost:9090/placeOrderFallBack
## 二、运行步骤
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录