main.py 2.1 KB
Newer Older
L
lishuangbin 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
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)