erikwang2013/etcd
PHP etcd v3 客户端 — gRPC + HTTP 双模传输,全功能 API,支持 Laravel / Hyperf / ThinkPHP / Webman。
要求
- PHP >= 8.1
- etcd v3.x 服务端
- PSR-18 + PSR-17 HTTP 客户端(HTTP 传输必需,各框架通常自带)
安装
1 | composer require erikwang2013/etcd |
快速开始
1 | use Erikwang2013\Etcd\EtcdClient; |
配置
1 | $etcd = new EtcdClient([ |
环境变量
不传配置时自动读取环境变量:
| 变量 | 默认值 | 说明 |
|---|---|---|
ETCD_ENDPOINTS |
127.0.0.1:2379 |
逗号分隔的多节点地址 |
ETCD_TRANSPORT |
auto |
auto / http / grpc |
ETCD_TIMEOUT |
5.0 |
请求超时(秒) |
ETCD_RETRY |
2 |
连接重试次数 |
ETCD_USER |
— | etcd 用户名 |
ETCD_PASSWORD |
— | etcd 密码 |
API 参考
KV — 键值操作
1 | // 写入 |
比较目标(target)常量: 0=VERSION, 1=CREATE, 2=MOD, 3=VALUE, 4=LEASE
比较结果(result)常量: 0=EQUAL, 1=GREATER, 2=LESS, 3=NOT_EQUAL
Watch — 变更监听
1 | // 监听单个 key(阻塞模式,建议在协程/独立进程中运行) |
断线重连: Watch 连接断开时自动从上一次收到的 revision 续订,不会丢失事件。
Lease — 租约
1 | // 创建租约 |
典型场景: 服务注册时创建租约 + 写入 key,定时调用 keepAlive() 心跳续约;服务停止后租约到期自动清理。
Auth — 认证与权限
1 | $auth = $etcd->auth(); |
注意: 开启认证后,客户端必须配置 auth.user 和 auth.password 才能继续操作。
Cluster — 集群管理
1 | // 查看集群成员 |
Maintenance — 运维
1 | // 查看节点状态 |
传输模式
| 模式 | 状态 | 依赖 | 适用场景 |
|---|---|---|---|
| HTTP | 可用 | PSR-18 + PSR-17 | 零扩展依赖,即刻可用 |
| gRPC | 骨架 | ext-grpc + grpc/grpc + google/protobuf | 高性能、原生流式 |
| auto | 默认 | 自动检测 | 有 gRPC 则用 gRPC,否则 HTTP |
auto 模式检测逻辑:
extension_loaded('grpc')— C 扩展已加载?class_exists('Grpc\BaseStub')—grpc/grpccomposer 包已安装?
两者都满足才走 gRPC,否则回退 HTTP。
手动配置 PSR-18 HTTP 客户端
1 | use Erikwang2013\Etcd\Transport\HttpTransport; |
框架集成
Laravel
安装即用。composer.json 的 extra.laravel 自动发现 ServiceProvider 和 Facade。
1 | // Facade 方式 |
发布配置文件:
1 | php artisan vendor:publish --tag=etcd-config |
.env 配置:
1 | ETCD_ENDPOINTS=10.0.0.1:2379,10.0.0.2:2379 |
Hyperf
安装即用。Hyperf 自动发现 ConfigProvider。
1 | use Erikwang2013\Etcd\EtcdClient; |
发布配置:
1 | php bin/hyperf.php vendor:publish erikwang2013/etcd |
ThinkPHP
- 安装后,在
app/service.php中注册:
1 | return [ |
- 创建
config/etcd.php配置文件。
使用:
1 | // Facade 方式 |
Webman
安装即用,无需额外配置。
1 | use Erikwang2013\Etcd\EtcdClient; |
如需自定义配置,编辑 plugin/erikwang2013/etcd/config/etcd.php。
异常处理
1 | use Erikwang2013\Etcd\Exception\{ |
目录结构
1 | src/ |
开源不易,欢迎支持
| 微信 | 支付宝 |
|---|---|
![]() |
![]() |
License
MIT — Copyright (c) 2026 erik erik@erik.xyz
本文链接: https://erik.xyz/open/etcd.html
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!

