fix(runtime): 修复 ConfigReloadMixin 事件处理器因 __name__ 未同步被静默跳过,配置变更不再触发模块重载 (#6329)

This commit is contained in:
jxxghp
2026-08-15 21:27:59 +08:00
parent 67968dd0cb
commit 4858f4652b
3 changed files with 142 additions and 1 deletions
+11 -1
View File
@@ -675,7 +675,17 @@ class EventManager(metaclass=Singleton):
return None
method = getattr(binding.instance, method_name, None)
if not callable(method):
return None
# 动态生成的处理器可能只同步了 __qualname____name__ 与类上方法名不一致时
# 回退到限定名末段重试;仍无法解析时记录告警,避免静默跳过
fallback_name = self.__parse_handler_names(handler)[1]
method = getattr(binding.instance, fallback_name, None)
if fallback_name == method_name or not callable(method):
logger.warning(
f"事件处理器 {self.__get_handler_identifier(handler)} "
f"无法解析为实例方法 {owner_class.__name__}.{method_name},跳过执行"
)
return None
method_name = fallback_name
return method, binding, owner_class.__name__, method_name
def __broadcast_consumer_loop(self):
+3
View File
@@ -66,6 +66,9 @@ class ConfigReloadMixin:
# 创建并设置处理函数
handler = create_handler(is_async)
handler.__module__ = cls.__module__
# 事件总线按 __name__ 在实例上解析方法,必须与类上的方法名保持一致,
# 否则闭包默认名 wrapper 会导致处理器被静默跳过
handler.__name__ = method_name
handler.__qualname__ = f"{cls.__name__}.{method_name}"
setattr(cls, method_name, handler)
# 添加为事件处理器