From d45241c20f316ec32301f8881c4baf35d6470292 Mon Sep 17 00:00:00 2001 From: zch Date: Wed, 2 Jul 2025 10:48:03 +0800 Subject: [PATCH] =?UTF-8?q?feat(workflow):=20=E6=B7=BB=E5=8A=A0=20Dubbo?= =?UTF-8?q?=E7=A7=9F=E6=88=B7=E4=B8=8A=E4=B8=8B=E6=96=87=E8=BF=87=E6=BB=A4?= =?UTF-8?q?=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 DubboTenantFilter 类,用于在 Dubbo 服务调用时传递和设置租户上下文 - 实现了 Filter 接口,通过 RpcContext 获取租户 ID 并设置到 TenantHelper - 在 META-INF/dubbo/org.apache.dubbo.rpc.Filter 文件中注册过滤器 --- .../workflow/filter/DubboTenantFilter.java | 44 +++++++++++++++++++ .../dubbo/org.apache.dubbo.rpc.Filter | 1 + 2 files changed, 45 insertions(+) create mode 100644 ruoyi-modules/hwmom-workflow/src/main/java/org/dromara/workflow/filter/DubboTenantFilter.java create mode 100644 ruoyi-modules/hwmom-workflow/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter diff --git a/ruoyi-modules/hwmom-workflow/src/main/java/org/dromara/workflow/filter/DubboTenantFilter.java b/ruoyi-modules/hwmom-workflow/src/main/java/org/dromara/workflow/filter/DubboTenantFilter.java new file mode 100644 index 0000000..708e80e --- /dev/null +++ b/ruoyi-modules/hwmom-workflow/src/main/java/org/dromara/workflow/filter/DubboTenantFilter.java @@ -0,0 +1,44 @@ +package org.dromara.workflow.filter; + +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.common.constants.CommonConstants; +import org.apache.dubbo.common.extension.Activate; +import org.apache.dubbo.rpc.*; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.tenant.helper.TenantHelper; + +/** + * Dubbo租户上下文过滤器 + * 用于在Dubbo服务调用时传递和设置租户上下文 + * + * @author Claude + */ +@Slf4j +@Activate(group = {CommonConstants.PROVIDER}) +public class DubboTenantFilter implements Filter { + + private static final String TENANT_ID_KEY = "tenantId"; + + @Override + public Result invoke(Invoker invoker, Invocation invocation) throws RpcException { + // 获取调用方传递的租户ID + String tenantId = RpcContext.getContext().getAttachment(TENANT_ID_KEY); + + if (StringUtils.isNotBlank(tenantId)) { + // 设置租户上下文 + TenantHelper.setDynamic(tenantId); + log.debug("Dubbo服务端设置租户上下文: {}", tenantId); + } + + try { + // 执行服务调用 + return invoker.invoke(invocation); + } finally { + // 清理租户上下文,避免线程复用时的污染 + if (StringUtils.isNotBlank(tenantId)) { + TenantHelper.clearDynamic(); + log.debug("Dubbo服务端清理租户上下文: {}", tenantId); + } + } + } +} \ No newline at end of file diff --git a/ruoyi-modules/hwmom-workflow/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter b/ruoyi-modules/hwmom-workflow/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter new file mode 100644 index 0000000..6c6b7db --- /dev/null +++ b/ruoyi-modules/hwmom-workflow/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter @@ -0,0 +1 @@ +dubboTenantFilter=org.dromara.workflow.filter.DubboTenantFilter \ No newline at end of file