Files
SMANAGE/ATestCServer/apps/sub_server/apps.py
T

73 lines
2.8 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) 注册实验本地事务处理器(供主服务器 Saga 编排回调)
self._register_local_handlers()
# 3) 启动 MSYNC 桥接
self._connect_msync()
def _register_local_handlers(self):
try:
from .local_handlers import RegisterExperimentHandlers
RegisterExperimentHandlers()
logger.info('实验本地事务处理器已注册: demo_a/demo_b/demo_fail/demo_flaky')
except Exception as e:
logger.error(f'实验本地事务处理器注册失败: {e}')
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}')