Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
917746a1
提交
917746a1
authored
6月 25, 2022
作者:
YunaiV
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
完善 yudao-spring-boot-starter-env 组件,完成 dubbo 组件
上级
2faaa653
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
36 行增加
和
24 行删除
+36
-24
pom.xml
yudao-dependencies/pom.xml
+5
-0
pom.xml
yudao-framework/yudao-spring-boot-starter-env/pom.xml
+9
-0
DubboConsumerRouterTagClusterInterceptor.java
.../core/dubbo/DubboConsumerRouterTagClusterInterceptor.java
+7
-8
DubboProviderRouterTagFilter.java
...ramework/env/core/dubbo/DubboProviderRouterTagFilter.java
+13
-15
com.alibaba.dubbo.rpc.Filter
...ain/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.Filter
+1
-0
org.apache.dubbo.rpc.cluster.interceptor.ClusterInterceptor
...g.apache.dubbo.rpc.cluster.interceptor.ClusterInterceptor
+1
-0
org.apache.dubbo.rpc.cluster.interceptor.ClusterInterceptor
...g.apache.dubbo.rpc.cluster.interceptor.ClusterInterceptor
+0
-1
没有找到文件。
yudao-dependencies/pom.xml
浏览文件 @
917746a1
...
@@ -247,6 +247,11 @@
...
@@ -247,6 +247,11 @@
<artifactId>
dubbo-common
</artifactId>
<!-- 兜底,保证在不引入 spring-cloud-starter-dubbo 时,注解等不报错 -->
<artifactId>
dubbo-common
</artifactId>
<!-- 兜底,保证在不引入 spring-cloud-starter-dubbo 时,注解等不报错 -->
<version>
${dubbo.version}
</version>
<version>
${dubbo.version}
</version>
</dependency>
</dependency>
<dependency>
<groupId>
org.apache.dubbo
</groupId>
<artifactId>
dubbo-cluster
</artifactId>
<!-- 兜底,保证在不引入 spring-cloud-starter-dubbo 时,注解等不报错 -->
<version>
${dubbo.version}
</version>
</dependency>
<dependency>
<dependency>
<groupId>
cn.iocoder.cloud
</groupId>
<groupId>
cn.iocoder.cloud
</groupId>
<artifactId>
yudao-spring-boot-starter-rpc
</artifactId>
<artifactId>
yudao-spring-boot-starter-rpc
</artifactId>
...
...
yudao-framework/yudao-spring-boot-starter-env/pom.xml
浏览文件 @
917746a1
...
@@ -56,6 +56,15 @@
...
@@ -56,6 +56,15 @@
<artifactId>
feign-core
</artifactId>
<artifactId>
feign-core
</artifactId>
</dependency>
</dependency>
<dependency>
<groupId>
org.apache.dubbo
</groupId>
<artifactId>
dubbo-common
</artifactId>
</dependency>
<dependency>
<groupId>
org.apache.dubbo
</groupId>
<artifactId>
dubbo-cluster
</artifactId>
</dependency>
<!-- Registry 注册中心相关 -->
<!-- Registry 注册中心相关 -->
<dependency>
<dependency>
<groupId>
com.alibaba.cloud
</groupId>
<groupId>
com.alibaba.cloud
</groupId>
...
...
归档/common/mall-spring-boot-starter-dubbo/src/main/java/cn/iocoder/mall/dubbo/core/cluster/interceptor
/DubboConsumerRouterTagClusterInterceptor.java
→
yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/core/dubbo
/DubboConsumerRouterTagClusterInterceptor.java
浏览文件 @
917746a1
package
cn
.
iocoder
.
mall
.
dubbo
.
core
.
cluster
.
interceptor
;
package
cn
.
iocoder
.
yudao
.
framework
.
env
.
core
.
dubbo
;
import
cn.iocoder.common.framework.util.StringUtils
;
import
cn.iocoder.yudao.framework.env.core.context.EnvContextHolder
;
import
cn.iocoder.mall.dubbo.core.filter.DubboProviderRouterTagFilter
;
import
cn.iocoder.mall.dubbo.core.router.DubboRouterTagContextHolder
;
import
org.apache.dubbo.common.constants.CommonConstants
;
import
org.apache.dubbo.common.constants.CommonConstants
;
import
org.apache.dubbo.common.extension.Activate
;
import
org.apache.dubbo.common.extension.Activate
;
import
org.apache.dubbo.rpc.Invocation
;
import
org.apache.dubbo.rpc.Invocation
;
import
org.apache.dubbo.rpc.cluster.interceptor.ClusterInterceptor
;
import
org.apache.dubbo.rpc.cluster.interceptor.ClusterInterceptor
;
import
org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker
;
import
org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker
;
import
org.springframework.util.StringUtils
;
/**
/**
* Consumer 方,在调用 Provider 时,将 {@link
DubboRouterTag
ContextHolder} 中的 Tag 通过 Dubbo 隐式传参。
* Consumer 方,在调用 Provider 时,将 {@link
Env
ContextHolder} 中的 Tag 通过 Dubbo 隐式传参。
*
*
* 完整逻辑说明,见 {@link DubboProviderRouterTagFilter}
* 完整逻辑说明,见 {@link DubboProviderRouterTagFilter}
*
*
...
@@ -22,9 +21,9 @@ public class DubboConsumerRouterTagClusterInterceptor implements ClusterIntercep
...
@@ -22,9 +21,9 @@ public class DubboConsumerRouterTagClusterInterceptor implements ClusterIntercep
@Override
@Override
public
void
before
(
AbstractClusterInvoker
<?>
clusterInvoker
,
Invocation
invocation
)
{
public
void
before
(
AbstractClusterInvoker
<?>
clusterInvoker
,
Invocation
invocation
)
{
// 设置 Dubbo Tag 到 Dubbo 隐式传参
// 设置 Dubbo Tag 到 Dubbo 隐式传参
String
dubboTag
=
DubboRouterTag
ContextHolder
.
getTag
();
String
tag
=
Env
ContextHolder
.
getTag
();
if
(
StringUtils
.
hasText
(
dubboT
ag
))
{
if
(
StringUtils
.
hasText
(
t
ag
))
{
invocation
.
setAttachment
(
CommonConstants
.
TAG_KEY
,
dubboT
ag
);
invocation
.
setAttachment
(
CommonConstants
.
TAG_KEY
,
t
ag
);
}
}
}
}
...
...
归档/common/mall-spring-boot-starter-dubbo/src/main/java/cn/iocoder/mall/dubbo/core/filter
/DubboProviderRouterTagFilter.java
→
yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/core/dubbo
/DubboProviderRouterTagFilter.java
浏览文件 @
917746a1
package
cn
.
iocoder
.
mall
.
dubbo
.
core
.
filter
;
package
cn
.
iocoder
.
yudao
.
framework
.
env
.
core
.
dubbo
;
import
cn.iocoder.common.framework.util.StringUtils
;
import
cn.hutool.core.util.StrUtil
;
import
cn.iocoder.mall.dubbo.core.cluster.interceptor.DubboConsumerRouterTagClusterInterceptor
;
import
cn.iocoder.yudao.framework.env.core.context.EnvContextHolder
;
import
cn.iocoder.mall.dubbo.core.router.DubboRouterTagContextHolder
;
import
org.apache.dubbo.common.constants.CommonConstants
;
import
org.apache.dubbo.common.constants.CommonConstants
;
import
org.apache.dubbo.common.extension.Activate
;
import
org.apache.dubbo.common.extension.Activate
;
import
org.apache.dubbo.rpc.*
;
import
org.apache.dubbo.rpc.*
;
...
@@ -15,9 +14,9 @@ import org.apache.dubbo.rpc.cluster.router.tag.TagRouter;
...
@@ -15,9 +14,9 @@ import org.apache.dubbo.rpc.cluster.router.tag.TagRouter;
* 2. TODO 优化点:蓝绿发布、灰度发布
* 2. TODO 优化点:蓝绿发布、灰度发布
*
*
* 实现逻辑为:
* 实现逻辑为:
* 1. 对于 Consumer 方,在调用 Provider 时,{@link DubboConsumerRouterTagClusterInterceptor} 会将 {@link
DubboRouterTag
ContextHolder} 中的 Tag 通过 Dubbo 隐式传参。
* 1. 对于 Consumer 方,在调用 Provider 时,{@link DubboConsumerRouterTagClusterInterceptor} 会将 {@link
Env
ContextHolder} 中的 Tag 通过 Dubbo 隐式传参。
* 同时,Dubbo 自带 {@link TagRouter},会根据该参数,会选择符合该 Tag 的 Provider。
* 同时,Dubbo 自带 {@link TagRouter},会根据该参数,会选择符合该 Tag 的 Provider。
* 2. 对于 Provider 方,在通过 Dubbo 隐式传参获得到 Tag 时,会设置到 {@link
DubboRouterTag
ContextHolder} 中。
* 2. 对于 Provider 方,在通过 Dubbo 隐式传参获得到 Tag 时,会设置到 {@link
Env
ContextHolder} 中。
* 这样,在 Provider 作为 Consumer 角色时,调用其它 Provider 时,可以继续实现标签路由的功能。
* 这样,在 Provider 作为 Consumer 角色时,调用其它 Provider 时,可以继续实现标签路由的功能。
*/
*/
@Activate
(
group
=
{
CommonConstants
.
PROVIDER
,
CommonConstants
.
CONSUMER
},
order
=
-
1000
)
@Activate
(
group
=
{
CommonConstants
.
PROVIDER
,
CommonConstants
.
CONSUMER
},
order
=
-
1000
)
...
@@ -25,20 +24,19 @@ public class DubboProviderRouterTagFilter implements Filter {
...
@@ -25,20 +24,19 @@ public class DubboProviderRouterTagFilter implements Filter {
@Override
@Override
public
Result
invoke
(
Invoker
<?>
invoker
,
Invocation
invocation
)
throws
RpcException
{
public
Result
invoke
(
Invoker
<?>
invoker
,
Invocation
invocation
)
throws
RpcException
{
// 从 Dubbo 隐式传参获得 Dubbo Tag
// 情况一,没有 tag 时,直接调用即可
String
dubboTag
=
invocation
.
getAttachment
(
CommonConstants
.
TAG_KEY
);
String
tag
=
invocation
.
getAttachment
(
CommonConstants
.
TAG_KEY
);
boolean
hasDubboTag
=
StringUtils
.
hasText
(
dubboTag
);
if
(
StrUtil
.
isEmpty
(
tag
))
{
if
(
hasDubboTag
)
{
return
invoker
.
invoke
(
invocation
);
invocation
.
setAttachment
(
CommonConstants
.
TAG_KEY
,
dubboTag
);
}
}
// 情况二,有 tag 时,从 Dubbo 隐式传参获得 Dubbo Tag
EnvContextHolder
.
setTag
(
tag
);
// 继续调用
// 继续调用
try
{
try
{
return
invoker
.
invoke
(
invocation
);
return
invoker
.
invoke
(
invocation
);
}
finally
{
}
finally
{
// 清理
EnvContextHolder
.
removeTag
();
if
(
hasDubboTag
)
{
DubboRouterTagContextHolder
.
clear
();
}
}
}
}
}
...
...
yudao-framework/yudao-spring-boot-starter-env/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.Filter
0 → 100644
浏览文件 @
917746a1
dubboProviderRouterTagFilter=cn.iocoder.yudao.framework.env.core.dubbo.DubboProviderRouterTagFilter
yudao-framework/yudao-spring-boot-starter-env/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.cluster.interceptor.ClusterInterceptor
0 → 100644
浏览文件 @
917746a1
dubboConsumerRouterTagClusterInterceptor=cn.iocoder.yudao.framework.env.core.dubbo.DubboConsumerRouterTagClusterInterceptor
归档/common/mall-spring-boot-starter-dubbo/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.cluster.interceptor.ClusterInterceptor
deleted
100644 → 0
浏览文件 @
2faaa653
dubboConsumerRouterTagClusterInterceptor=cn.iocoder.mall.dubbo.core.cluster.interceptor.DubboConsumerRouterTagClusterInterceptor
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论