You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
985 B
Python
35 lines
985 B
Python
|
6 months ago
|
from hello_agents.protocols import ANPDiscovery, register_service
|
||
|
|
import random
|
||
|
|
|
||
|
|
# 创建服务发现中心
|
||
|
|
discovery = ANPDiscovery()
|
||
|
|
|
||
|
|
# 注册多个相同类型的服务
|
||
|
|
for i in range(5):
|
||
|
|
register_service(
|
||
|
|
discovery=discovery,
|
||
|
|
service_id=f"api_server_{i}",
|
||
|
|
service_name=f"API服务器{i}",
|
||
|
|
service_type="api",
|
||
|
|
capabilities=["rest_api"],
|
||
|
|
endpoint=f"http://api{i}:8000",
|
||
|
|
metadata={"load": random.uniform(0.1, 0.9)}
|
||
|
|
)
|
||
|
|
|
||
|
|
# 负载均衡函数
|
||
|
|
def get_best_server():
|
||
|
|
"""选择负载最低的服务器"""
|
||
|
|
servers = discovery.discover_services(service_type="api")
|
||
|
|
if not servers:
|
||
|
|
return None
|
||
|
|
|
||
|
|
best = min(servers, key=lambda s: s.metadata.get("load", 1.0))
|
||
|
|
return best
|
||
|
|
|
||
|
|
# 模拟请求分配
|
||
|
|
for i in range(10):
|
||
|
|
server = get_best_server()
|
||
|
|
print(f"请求 {i+1} -> {server.service_name} (负载: {server.metadata['load']:.2f})")
|
||
|
|
|
||
|
|
# 更新负载(模拟)
|
||
|
|
server.metadata["load"] += 0.1
|