fix(databus): 修复客户端消息处理和防止消息循环
1. 修复消息格式不匹配问题 - 增量消息:兼容 SyncMessage 格式,从 dataSnapshot 字段反序列化数据 - 批量消息:添加 getDataType() 方法获取泛型类型,正确转换 JSONObject 2. 防止消息循环 - 添加 zt.databus.change.producer.enabled 配置项 - 客户端禁用变更消息发送,避免 客户端写入 → 发送变更 → 循环 3. 修复 Feign 客户端注入 - 在 RpcConfiguration 中添加 DeptApi、PostApi - 确保客户端能通过 Feign 调用本地 system-server API 相关文件: - DatabusClientConsumer.java: 修复消息解析逻辑 - BatchSyncEventHandler.java: 添加 getDataType() 方法 - DatabusChangeProducer.java: 添加 enabled 开关 - RpcConfiguration.java: 启用 DeptApi/PostApi Feign 客户端 Ref: 修复 ClassCastException 和消息循环问题
This commit is contained in:
@@ -238,10 +238,13 @@ public enum DatabusEventType {
|
||||
|
||||
/**
|
||||
* 获取完整Topic名称(服务端转发用)
|
||||
* 格式: {topicBase}-{module}-{entity}-{action}-{clientCode}
|
||||
* 格式: {topicBase}-{clientCode}(简化版,所有事件共用一个 Topic)
|
||||
* 示例: databus-sync-branch-001
|
||||
*
|
||||
* 注意:不再为每个事件创建独立 Topic,而是通过消息体中的 eventType 字段路由
|
||||
*/
|
||||
public String getTopic(String topicBase, String clientCode) {
|
||||
return String.format("%s-%s-%s-%s-%s", topicBase, module, entity, action, clientCode);
|
||||
return String.format("%s-%s", topicBase, clientCode);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -270,6 +273,31 @@ public enum DatabusEventType {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据事件类型字符串获取枚举(支持大写下划线格式)
|
||||
* 例如:SYSTEM_POST_FULL → DatabusEventType.SYSTEM_POST_FULL
|
||||
*
|
||||
* @param eventType 事件类型字符串(格式: MODULE_ENTITY_ACTION)
|
||||
* @return 枚举值,未找到返回null
|
||||
*/
|
||||
public static DatabusEventType getByEventType(String eventType) {
|
||||
if (eventType == null) {
|
||||
return null;
|
||||
}
|
||||
// 先尝试直接匹配枚举名称
|
||||
try {
|
||||
return DatabusEventType.valueOf(eventType.toUpperCase());
|
||||
} catch (IllegalArgumentException e) {
|
||||
// 如果失败,尝试转换格式后匹配(如 system-post-full → SYSTEM_POST_FULL)
|
||||
String normalized = eventType.toUpperCase().replace("-", "_");
|
||||
try {
|
||||
return DatabusEventType.valueOf(normalized);
|
||||
} catch (IllegalArgumentException ex) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据模块、实体、操作获取枚举
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user