python技术简介(三)

cnblogs 2024-07-20 08:09:00 阅读 51

python直连etcd以及其应用:在 python 中,有几个库可以用于与 etcd 进行交互,其中最常用的是 etcd3python-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}')



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。