import uvicorn from fastapi import FastAPI from starlette.middleware.cors import CORSMiddleware from apscheduler.schedulers.asyncio import AsyncIOScheduler import yaml import api_skl_kmeans from nacos_utils import NacosHelper import settings service_name = 'skl-kmeans' service_port = 9999 beat_interval = 30 nacos_endpoint = '192.168.1.238:8848' nacos_namespace_id = '1bc91fa5-37e3-4269-8e41-3f4e4efb7633' nacos_group_name = 'DEFAULT_GROUP' nacos_username = 'nacos' nacos_password = 'nacos' nacos_data_id = 'skl-kmeans' def load_config(content): yaml_config = yaml.full_load(content) clusters = yaml_config['clusters'] settings.clusters = clusters def nacos_config_callback(args): content = args['raw_content'] load_config(content) def get_application() -> FastAPI: fastapi_kwargs= { "debug": False, "docs_url": "/docs", "openapi_prefix": "", "openapi_url": "/openapi.json", "redoc_url": "/redoc", "title": "sklkmeans", "version": "1.0.0", } application = FastAPI(**fastapi_kwargs) application.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) application.include_router(api_skl_kmeans.router, tags=['skl-kmeans']) nacos = NacosHelper(nacos_endpoint, nacos_namespace_id, nacos_username, nacos_password) nacos.set_service(service_name, service_port, nacos_group_name) nacos.register() # 注册配置变更监控回调 nacos.add_conf_watcher(nacos_data_id, nacos_group_name, nacos_config_callback) # 启动时,强制同步一次配置 data_stream = nacos.load_conf(nacos_data_id,nacos_group_name) load_config(data_stream) @application.on_event('startup') def init_scheduler(): scheduler = AsyncIOScheduler() scheduler.add_job(nacos.beat_callback, 'interval', seconds=beat_interval) scheduler.start() return application if __name__ == '__main__': uvicorn.run(app=get_application(), host='0.0.0.0', port=service_port)