|
python直连etcd以及其应用:在 python 中,有几个库可以用于与 etcd 进行交互,其中最常用的是 etcd3 和 python-etcd。
1、etcd3的介绍- # 安装
- pip install etcd3
- # 方法
- # 连接到 etcd 服务器
- etcd3.client(host, port)
- # 设置键值
- put(key, value)
- # 获取键值
- get(key)
- # 删除键值
- delete(key)
- # 获取以指定前缀开头的所有键值
- get_prefix(prefix)
- # 删除以指定前缀开头的所有键值
- delete_prefix(prefix)
- # 监听键值变化
- watch(key)
复制代码 应用场景-服务注册与发现:服务注册是指服务实例在启动时,将自己的网络地址(IP 和端口)注册到服务注册中心(如 etcd)。注册中心维护了一个服务实例的目录,客户端可以通过查询注册中心来发现可用的服务实例。服务发现是指客户端从服务注册中心获取可用的服务实例列表,以便进行请求路由。当某个服务实例不可用或增加新的实例时,服务注册中心会相应地更新注册信息。
详细业务步骤
- 服务启动时注册
- 服务实例启动时,将自身的网络地址(IP 和端口)注册到 etcd 中。
- 服务实例使用一个唯一的服务 ID 进行注册,以便后续管理。
- 服务发现
- 客户端查询 etcd 获取可用的服务实例列表。
- 客户端根据获取的服务实例信息进行负载均衡和请求路由。
我们现在可以使用 etcd3 库,实现来为我们的 my_service 的服务进行服务注册和发现。- import etcd3
- import socket
- import uuid
- def register_service(service_name, host, port):
- etcd = etcd3.client()
- service_id = str(uuid.uuid4())
- key = f'/services/{service_name}/{service_id}'
- value = f'{host}:{port}'
- etcd.put(key, value)
- print(f'Service {service_name} registered with ID {service_id} at {host}:{port}')
- return service_id
- def unregister_service(service_name, service_id):
- etcd = etcd3.client()
- key = f'/services/{service_name}/{service_id}'
- etcd.delete(key)
- print(f'Service {service_name} unregistered with ID {service_id}')
- # 获取本机IP地址
- hostname = socket.gethostname()
- host_ip = socket.gethostbyname(hostname)
- # 注册服务
- service_id = register_service('my_service', host_ip, 8080)
- # 停止服务时取消注册
- # unregister_service('my_service', service_id)
- def discover_services(service_name):
- etcd = etcd3.client()
- instances = etcd.get_prefix(f'/services/{service_name}')
- services = []
- for value, metadata in instances:
- service_info = value.decode('utf-8')
- services.append(service_info)
- return services
- # 发现服务
- services = discover_services('my_service')
- print(f'Discovered services: {services}')
复制代码
来源:https://www.cnblogs.com/xiaojp65536/p/18312578
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
|