安装依赖
pipenv install apscheduler
pipenv install nacos-sdk-python
编写注册方法 app/nacos.py
import nacos
from .settings import settings
client = nacos.NacosClient(
settings.SERVER_HOST,
namespace=settings.SERVER_NAMESPACE_ID)
async def beat():
client.add_naming_instance(
settings.SERVICE_NAME,settings.SERVICE_IP,settings.SERVICE_PORT,
group_name=settings.SERVICE_GROUP_NAME)
# 微服务注册nacos
def register_nacos():
client.add_naming_instance(
settings.SERVICE_NAME,settings.SERVICE_IP,settings.SERVICE_PORT,
group_name=settings.SERVICE_GROUP_NAME)
编写配置类
import os
from pydantic import BaseSettings
# None
fast_api_env = os.environ.get('FAST_API_ENV')
class Development(BaseSettings):
MODEL = 'dev'
DB_URL = r'mysql://root:123456@127.0.0.1:3306/fastapi'
MODULES = {'models': ['app.models.users']}
# db_url='mysql://root:123456@127.0.0.1:3306/fastapi',
# db_url='sqlite:/fastapi.db'
JWT_TOKEN_EXPIRE_MINUTES: int = 120 # 2小时
JWT_SECRET_KEY: str = "(-ASp+_)-Ulhw0848hnvVG-iqKyJSD&*&^-H3C9mqEqSl8KN-YRzRE"
SERVER_HOST='10.0.0.192:8848'
SERVER_NAMESPACE_ID='5fa2f06b-1959-4b32-9060-81e49e54dfdd'
SERVICE_GROUP_NAME='dev'
SERVICE_NAME='fastapi-service'
SERVICE_IP='10.0.0.193'
SERVICE_PORT=8000
# 生产配置
class Product(BaseSettings):
MODEL = 'pro'
settings = Development() if fast_api_env != 'dev' else Product()
主入口调用实现注册
from fastapi import FastAPI,Form,Request,Query,WebSocket
from pydantic import BaseModel
import uvicorn
from app.nacos import register_nacos,beat
app=FastAPI()
# 微服务注册
register_nacos()
心跳
from apscheduler.schedulers.asyncio import AsyncIOScheduler
@app.on_event('startup')
def init_scheduler():
scheduler = AsyncIOScheduler()
scheduler.add_job(beat, 'interval', seconds=5)
scheduler.start()
注册结果
服务调用测试