Files
SMANAGE/ATestCServer/apps/sub_server/apps.py
T
TermiNexus d46e3a22c5 fix(msync): 版本升至 1.1.0,Saga 缺陷修复 + ATestCServer 本地事务端点 + 文档修正
- gvsds/settings.py 版本要求升至 1.1.0
- 新增 Saga 状态机回归测试(sqlite 内存库,12 项断言,独立运行)
- ATestCServer:新增 local/execute、local/compensate、local/handlers 端点
  (主服务器 Saga 驱动子服务器步骤),主服务器令牌经 introspect 远程校验
- SAAS_ARCHITECTURE.md:msync 双包描述更新、Role/Permission 双份收敛标注、
  ABAC 定位更正为属性标识符补充层
2026-08-10 22:39:08 +08:00

63 lines
2.3 KiB
Python

"""模块:子服务器 AppConfig
Django 启动时自动完成 MSYNC Socket.IO 桥接——连接、注册、认证、心跳。"""
import logging
import threading
from django.apps import AppConfig
from django.conf import settings
logger = logging.getLogger(__name__)
# 与主服务器约定的 SDK 最低版本——版本不一致时启动警告
REQUIRED_GVSDSDK_VERSION = '1.1.0'
class SubServerConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'apps.sub_server'
verbose_name = 'SMANAGE 子服务器'
verbose_name_plural = 'SMANAGE 子服务器'
def ready(self):
# 1) 校验 gvsdsdk 版本与主服务器一致
self._check_sdk_version()
# 2) 启动 MSYNC 桥接
self._connect_msync()
def _check_sdk_version(self):
try:
import gvsdsdk
info = gvsdsdk.get_version_info()
logger.info(f'[SDK] 加载: v{info["Version"]} @ {info["Location"]}')
ok, msg = gvsdsdk.check_min_version(REQUIRED_GVSDSDK_VERSION)
if ok:
logger.info(f'[SDK] {msg}')
else:
logger.warning(f'[SDK] 版本不符!{msg}。双端 gvsdsdk 版本必须一致!')
except ImportError as e:
logger.error(f'[SDK] gvsdsdk 未安装: {e}')
except Exception as e:
logger.error(f'[SDK] 版本检查失败: {e}')
def _connect_msync(self):
try:
from msync_client.sio_client import MSyncSocketClient
msync_client = MSyncSocketClient(
master_url=settings.MSYNC_MASTER_URL,
service_name=settings.MSYNC_SERVICE_NAME,
service_domain=settings.MSYNC_SERVICE_DOMAIN,
service_secret=settings.MSYNC_SERVICE_SECRET,
scope=settings.MSYNC_SERVICE_SCOPE,
heartbeat_interval=settings.MSYNC_HEARTBEAT_INTERVAL,
metadata={'DBName': settings.DATABASES['default']['NAME']},
)
setattr(settings, 'MSYNC_CLIENT', msync_client)
t = threading.Thread(target=msync_client.Connect, daemon=True)
t.start()
logger.info('MSYNC Socket.IO 桥接线程已启动')
except Exception as e:
logger.error(f'MSYNC 桥接启动失败: {e}')