欢迎使用 EasyUse Nacos
EasyUse Nacos介绍
easyuse_nacos可帮助你更便捷地从服务端读取配置信息。
安装
开始使用
- 服务端配置
| Key | Value | Group |
|---|---|---|
| test_key | 1234 | group1 |
| test_json | {"name":"bob","age": 18} | DEFAULT_GROUP |
- 从服务端获取配置
from easyuse_nacos import NacosConfig, NacosConfigProperty
class ExampleConfig(NacosConfig, server_address="<your server address>", namespace_id="<your namespace id>"):
test_key = NacosConfigProperty(group='group1')
test_json = NacosConfigProperty()
print(ExampleConfig.test_key)
#> 1234
print(ExampleConfig.test_json)
#> {
"name":"bob",
"age": 18
}
所有的配置类必须继承自NacosConfig类。
Note
使用类属性和实例属性访问配置项内容,返回结果完全相同。这两种方式完全等价,通常建议直接使用类属性进行访问。
服务端配置
全局配置
如果项目内,所有配置项均从一个固定的namespace下读取,可以从环境变量配置服务端信息
.env
NACOS_SERVER=<your nacos server>
NACOS_NAMESPACE_ID=<your namespace id>
# 服务端nacos.core.sdk.auth.enabled=true时,需配置username和password
NACOS_USERNAME=<username for login nacos server>
NACOS_PASSWORD=<password for login nacos server>
配置类上进行配置
对于需要从不同服务端或者不同namespace下读取的配置内容,可以在配置类上添加配置信息
- 传入server和namespace
在配置类上进行配置
from easyuse_nacos import NacosConfig, NacosConfigProperty
class ExampleConfig(NacosConfig, server_address="<your server address>", namespace_id="<your namespace id>",
username="<your username>", password="<your password>"):
test_json = NacosConfigProperty()
- 传入nacos_client
传入nacos_client进行配置
from easyuse_nacos import NacosConfig, NacosConfigProperty
from nacos import NacosClient
nacos_client = NacosClient(server_addresses='<your server address>',
namespace='<your namespace id>')
class ExampleConfig(NacosConfig, nacos_client=nacos_client):
test_key = NacosConfigProperty(group='group1')
配置优先级
对于一个配置类,当加载配置项时,将安装以下优先级创建对应的nacos client。
-
从继承自
NacosConfig类的子类上读取配置信息,, 如果传入nacos_client,则直接使用该对象。否则,若传入配置信息,使用对应配置信息创建nacos client. -
从环境变量配置信息,创建nacos client.
-
如果配置类和环境变量中都不存在配置信息,则在读取配置内容时抛出异常
默认值配置
为了在服务端无配置项获服务端连接异常时,仍然希望返回默认值,可以在配置项上配置默认值。
- 使用静态值作为配置项的默认值
from easyuse_nacos import NacosConfig, NacosConfigProperty
class ExampleConfig(NacosConfig ):
not_exist_key = NacosConfigProperty(default_value='default_val')
print(ExampleConfig.not_exist_key)
#> default_val
- 使用无参函数动态返回配置项默认值
对于默认值需要动态创建的配置项,可以传入无参函数作为默认值
from datetime import datetime
from easyuse_nacos import NacosConfig, NacosConfigProperty
class ExampleConfig(NacosConfig ):
current_datetime = NacosConfigProperty(default_value=lambda : datetime.now())
print(ExampleConfig.current_datetime)
#> 2024-12-02 20:07:52.687404
属性验证与转化
默认情况下,nacos客户端读取返回的值类型均为字符串类型,在实际使用场景中,需要按需将字符串转化为更具体的类型,如整数、布尔类型等等,非常不便。为了实现字段类型的自动转化,easyuse-nacos引入了pydantic进行属性类型的验证与转化。
from easyuse_nacos import NacosConfig, NacosConfigProperty
from pydantic import BaseModel
class Person(BaseModel):
age: int
name: str
class ExampleConfig(NacosConfig, server_address="<your server>",
namespace_id="<your namespace id>",
):
test_key: int = NacosConfigProperty(group='group1')
test_json: Person = NacosConfigProperty()
print(ExampleConfig.test_key)
#> 1234
print(ExampleConfig.test_key + 1)
#> 1235
print(ExampleConfig.test_json.age)
#> 18
print(ExampleConfig.test_json.name)
#> bob
嵌套类型的默认值配置
为了进行嵌套类型的默认值配置,需要利用pydantic的默认值配置功能
class Person(BaseModel):
age: int = 22
name: str = 'jack'
class ExampleConfig(NacosConfig, server_address="<your server>",
namespace_id="<your namespace id>",
):
no_exist_person: Person = NacosConfigProperty(default_value=Person())
print(ExampleConfig.no_exist_person.age)
#> 22
print(ExampleConfig.no_exist_person.name)
#> jack
在配置类中,默认值被设置为Person()对象,当服务端不存在对应的配置项时,返回该默认值对象