mq:移除默认的 spring cloud stream 和 bus,使用原生的 spring-rocketmq、spring-kafka、spring-rabbitmq 替代,降低学习成本,提升使用灵活性。
This commit is contained in:
@@ -1,32 +0,0 @@
|
||||
package cn.iocoder.yudao.framework.tenant.core.mq;
|
||||
|
||||
import cn.hutool.core.util.ReflectUtil;
|
||||
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
|
||||
import org.springframework.messaging.Message;
|
||||
import org.springframework.messaging.MessageChannel;
|
||||
import org.springframework.messaging.support.ChannelInterceptor;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.HEADER_TENANT_ID;
|
||||
|
||||
/**
|
||||
* 多租户的 {@link ChannelInterceptor} 实现类
|
||||
* 发送消息时,设置租户编号到 Header 上
|
||||
*
|
||||
* @author 芋道源码
|
||||
*/
|
||||
public class TenantChannelInterceptor implements ChannelInterceptor {
|
||||
|
||||
@Override
|
||||
@SuppressWarnings({"unchecked", "NullableProblems"})
|
||||
public Message<?> preSend(Message<?> message, MessageChannel channel) {
|
||||
Long tenantId = TenantContextHolder.getTenantId();
|
||||
if (tenantId != null) {
|
||||
Map<String, Object> headers = (Map<String, Object>) ReflectUtil.getFieldValue(message.getHeaders(), "headers");
|
||||
headers.put(HEADER_TENANT_ID, tenantId);
|
||||
}
|
||||
return message;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
package cn.iocoder.yudao.framework.tenant.core.mq;
|
||||
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils;
|
||||
import org.springframework.cloud.function.context.catalog.FunctionAroundWrapper;
|
||||
import org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry;
|
||||
import org.springframework.messaging.Message;
|
||||
|
||||
import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.HEADER_TENANT_ID;
|
||||
|
||||
/**
|
||||
* 多租户 FunctionAroundWrapper 实现类
|
||||
* 消费消息时,设置租户编号到 Context 上
|
||||
*
|
||||
* @author 芋道源码
|
||||
*/
|
||||
public class TenantFunctionAroundWrapper extends FunctionAroundWrapper {
|
||||
|
||||
@Override
|
||||
protected Object doApply(Object input, SimpleFunctionRegistry.FunctionInvocationWrapper targetFunction) {
|
||||
// 如果不是 MQ 消息,则直接跳过
|
||||
if (!(input instanceof Message)) {
|
||||
return targetFunction.apply(input);
|
||||
}
|
||||
// 如果没有多租户,则直接跳过
|
||||
Message<?> message = (Message<?>) input;
|
||||
Long tenantId = MapUtil.getLong(message.getHeaders(), HEADER_TENANT_ID);
|
||||
if (tenantId == null) {
|
||||
return targetFunction.apply(input);
|
||||
}
|
||||
|
||||
// 如果有多租户,则使用多租户上下文
|
||||
return TenantUtils.execute(tenantId, () -> targetFunction.apply(input));
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user