The NacosNamingService handles service discovery and instance registration. These methods are asynchronous.
Initialize Naming Service
naming_client = await NacosNamingService.create_naming_service(client_config)
Register an Instance
Registers a single service instance with details like IP, port, weight, and metadata.
response = await client.register_instance(
request=RegisterInstanceParam(
service_name='nacos.test.1',
group_name='DEFAULT_GROUP',
ip='1.1.1.1',
port=7001,
weight=1.0,
cluster_name='c1',
metadata={'a': 'b'},
enabled=True,
healthy=True,
ephemeral=True
)
)
Batch Register Instances
Efficiently register multiple instances at once using BatchRegisterInstanceParam.
param1 = RegisterInstanceParam(service_name='svc', group_name='DEFAULT_GROUP', ip='1.1.1.1', port=7001)
param2 = RegisterInstanceParam(service_name='svc', group_name='DEFAULT_GROUP', ip='1.1.1.2', port=7002)
response = await client.batch_register_instances(
request=BatchRegisterInstanceParam(
service_name='svc',
group_name='DEFAULT_GROUP',
instances=[param1, param2]
)
)
Deregister/Update Instance
- Deregister: Remove an instance from the registry.
- Update: Modify properties (like weight or metadata) of an existing instance.
# Deregister
await client.deregister_instance(request=DeregisterInstanceParam(service_name='svc', group_name='DEFAULT_GROUP', ip='1.1.1.1', port=7001))
# Update
await client.update_instance(request=RegisterInstanceParam(service_name='svc', group_name='DEFAULT_GROUP', ip='1.1.1.1', port=7001, weight=2.0))
Discover Services and Instances
get_service: Get details for a specific service.list_services: List all available services.list_instances: List instances for a service. Use healthy_only=True to filter for healthy instances.
# List healthy instances
instances = await client.list_instances(ListInstanceParam(service_name='nacos.test.1', healthy_only=True))
Subscribe to Service Changes
Subscribe to receive updates when the instance list for a service changes.
async def cb(instance_list: List[Instance]):
print('Received subscribe callback', str(instance_list))
await client.subscribe(
SubscribeServiceParam(service_name='nacos.test.1', group_name='DEFAULT_GROUP', subscribe_callback=cb)
)
Shutdown
await client.shutdown()
# Naming service example
naming_client = await NacosNamingService.create_naming_service(client_config)
# Register
await naming_client.register_instance(RegisterInstanceParam(
service_name='my_service',
group_name='DEFAULT_GROUP',
ip='127.0.0.1',
port=8080
))
# List
instances = await naming_client.list_instances(ListInstanceParam(service_name='my_service'))