使用 Buzz HTTP 客户端的 Etcd v3 PHP 客户端。

- ✨ 完整支持 Etcd v3 API
- 🔄 服务注册与发现(含心跳)
- 📡 服务调用(负载均衡)
- 🔐 用户认证与权限管理
- 📦 租约管理
- 🎯 PHP 8.2+ 语法兼容
| 依赖 |
版本 |
| PHP |
8.2+ |
| kriswallsmith/buzz |
^1.3 |
| nyholm/psr7 |
^1.8 |
| psr/http-client |
^1.0 |
| psr/http-message |
^1.0 || ^2.0 |
composer require chenbool/etcd-buzz-client
<?php
require 'vendor/autoload.php';
use chenbool\Etcd\Client;
// 创建客户端
$client = new Client('127.0.0.1:2379');
// 写入
$client->put('key', 'value');
// 读取
$value = $client->get('key');
// 删除
$client->del('key');
// 单个注册
$client->registerService('user-svc', '192.168.1.10', 8080, 30, ['version' => '1.0']);
// 批量注册
$client->registerServices([
['name' => 'order-svc', 'host' => '192.168.1.20', 'port' => 8080],
['name' => 'order-svc', 'host' => '192.168.1.21', 'port' => 8080],
]);
// GET 请求
$response = $client->call('user-svc', 'GET', '/api/user/1');
// POST 请求
$response = $client->call('user-svc', 'POST', '/api/user', ['name' => 'tom']);
// 轮询负载均衡
$response = $client->call('user-svc', 'GET', '/api/users', [], 'round');
// 发现指定服务
$services = $client->discoverService('user-svc');
// 获取所有服务
$allServices = $client->getAllServices();
// 发现所有服务(按服务名分组)
$grouped = $client->discoverAll('/services/');
// 返回: ['user-svc' => [...], 'order-svc' => [...]]
// 健康检查
$health = $client->getServiceHealth('user-svc', '192.168.1.10', 8080);
// 刷新单个租约
$client->refreshServiceLease('user-svc', '192.168.1.10', 8080, 60);
// 批量刷新
$client->refreshServiceLeases([
['name' => 'user-svc', 'host' => '192.168.1.10', 'port' => 8080],
]);
// 刷新所有服务租约
$client->refreshAllServicesLease(60);
// 心跳(单服务,阻塞运行)
// $client->heartbeat('user-svc', '192.168.1.10', 8080, 10);
// 批量心跳(多服务,阻塞运行)
$services = [
['name' => 'user-svc', 'host' => '192.168.1.10', 'port' => 8080],
['name' => 'order-svc', 'host' => '192.168.1.20', 'port' => 8080],
];
$client->heartbeatAll($services, 30, 25, function($name, $host, $port) {
echo "[Heartbeat] {$name}\n";
});
$client->deregisterService('user-svc', '192.168.1.10', 8080);
| 方法 |
说明 |
put($key, $value, $options) |
设置键值对 |
get($key, $options) |
获取值 |
getAllKeys() |
获取所有键 |
getKeysWithPrefix($prefix) |
获取前缀匹配的键 |
del($key, $options) |
删除键 |
compaction($revision) |
压缩存储 |
| 方法 |
说明 |
grant($ttl, $id) |
创建租约 |
revoke($id) |
撤销租约 |
keepAlive($id) |
保持租约活跃 |
timeToLive($id, $keys) |
获取租约信息 |
| 方法 |
说明 |
authEnable() / authDisable() |
启用/禁用认证 |
authenticate($user, $password) |
用户认证 |
addUser() / getUser() / deleteUser() |
用户管理 |
userList() |
用户列表 |
changeUserPassword() |
修改密码 |
addRole() / getRole() / deleteRole() |
角色管理 |
roleList() |
角色列表 |
grantUserRole() / revokeUserRole() |
用户角色管理 |
grantRolePermission() / revokeRolePermission() |
权限管理 |
| 方法 |
说明 |
registerService($name, $host, $port, $ttl, $metadata) |
注册服务 |
registerServices($services) |
批量注册 |
deregisterService($name, $host, $port) |
注销服务 |
discoverService($name) |
发现服务 |
discoverAll($prefix) |
发现所有服务(按服务名分组) |
getAllServices() |
获取所有服务 |
getServiceHealth($name, $host, $port) |
健康检查 |
refreshServiceLease($name, $host, $port, $ttl) |
刷新租约 |
refreshServiceLeases($services) |
批量刷新 |
refreshAllServicesLease($ttl) |
刷新所有 |
heartbeat($name, $host, $port, $ttl) |
单服务心跳 |
heartbeatAll($services, $ttl, $interval, $callback) |
批量心跳 |
| 方法 |
说明 |
call($service, $method, $path, $data, $strategy) |
调用服务 |
MIT