# etcd-php **Repository Path**: chenbool/etcd-php ## Basic Information - **Project Name**: etcd-php - **Description**: etcd-php - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-08 - **Last Updated**: 2026-05-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Etcd + Webman + Workerman 微服务架构 ## 架构概述 ``` ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ Etcd │ │ Webman │ │ Workerman │ │ (服务注册中心) │◄───►│ (服务调用方) │◄───►│ (服务提供方) │ │ 端口: 2379 │ │ 端口: 8787 │ │ 端口: 8788 │ └─────────────────┘ └─────────────────┘ └─────────────────┘ ``` ## 项目结构 ``` etcd-php/ ├── webman/ # 服务调用方 (Webman) │ ├── app/controller/ # 控制器 │ │ └── IndexController.php │ ├── composer.json # 依赖 chenbool/etcd │ └── config/ │ ├── workerman/ # 服务提供方 (Workerman) │ ├── app/ │ │ ├── handler/ # 业务处理器 │ │ │ ├── Handler.php │ │ │ ├── OrderHandler.php │ │ │ ├── UserHandler.php │ │ │ └── PaymentHandler.php │ │ └── process/ │ │ └── EtcdRegister.php │ ├── vendor/chenbool/etcd/ # Etcd 客户端包 │ ├── composer.json │ └── config.php │ ├── extra/ # Etcd 客户端包源码 │ ├── src/Etcd.php │ ├── composer.json │ └── readme.md │ └── etcd-v3.6.5-windows-amd64/ # Etcd 服务端 ``` ## 三个项目的关系 | 项目 | 角色 | 端口 | 说明 | |------|------|------|------| | etcd-v3.6.5-windows-amd64 | 注册中心 | 2379 | 存储服务地址 | | webman | 调用方 | 8787 | 发现并调用服务 | | workerman | 提供方 | 8788 | 提供业务服务 | ## 启动顺序 ### 1. 启动 Etcd(服务注册中心) ```bash cd c:\Users\81001\Desktop\ai\docker\etcd\etcd-v3.6.5-windows-amd64 run.bat ``` ### 2. 启动 Workerman(服务提供方) ```bash cd c:\Users\81001\Desktop\ai\docker\etcd\workerman run.bat ``` - 启动时自动向 Etcd 注册 3 个服务 - 启动心跳续期(每 25 秒) ### 3. 启动 Webman(服务调用方) ```bash cd c:\Users\81001\Desktop\ai\docker\etcd\webman php windows.php ``` ## 数据流 ``` ┌──────────────────────────────────────────────────────────────────┐ │ 1. 启动时 │ │ │ │ Workerman ──► Etcd 注册服务 │ │ 例: /services/order-service/127.0.0.1:8788 │ │ │ │ Workerman ──► 定时心跳续期 (每 25s) │ └──────────────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────────────────┐ │ 2. 调用时 │ │ │ │ 浏览器 ──► Webman (8787) │ │ │ │ │ ▼ │ │ Webman ──► Etcd 查询 order-service 地址 │ │ │ │ │ ▼ │ │ Webman ──► Workerman (8788) 发起 HTTP 调用 │ │ │ │ 例: GET /index/callEtcd?service=order-service&id=100 │ │ │ │ Webman 实际请求: http://127.0.0.1:8788/order-service?id=100 │ └──────────────────────────────────────────────────────────────────┘ ``` ## Etcd 客户端包 项目使用 `chenbool/etcd` Composer 包: ```json // webman/composer.json { "require": { "chenbool/etcd": "dev-main" }, "repositories": [{ "type": "vcs", "url": "https://github.com/chenbool/etcd-php.git" }] } ``` ### 使用方式 ```php use chenbool\extra\Etcd; $etcd = new Etcd('127.0.0.1', 2379, '/services/', 30); // 注册服务 $etcd->register('order-service', '127.0.0.1', 8788); // 发现服务 $services = $etcd->discover('order-service'); // 调用服务 $result = $etcd->call('order-service', '/order', ['id' => 1]); ``` ## API 调用示例 ### 通过 Webman 调用 Workerman 服务 ```bash # 调用订单服务 curl "http://127.0.0.1:8787/index/callEtcd?service=order-service&id=100&name=test" # 调用用户服务 curl "http://127.0.0.1:8787/index/callEtcd?service=user-service&username=admin" # 调用支付服务 curl "http://127.0.0.1:8787/index/callEtcd?service=payment-service&order_id=100&amount=99" ``` ### 直接调用 Workerman ```bash # 直接访问订单服务 curl "http://127.0.0.1:8788/order-service?id=100" # 直接访问用户服务 curl "http://127.0.0.1:8788/user-service?username=admin" # 直接访问支付服务 curl "http://127.0.0.1:8788/payment-service?order_id=100&amount=99" ``` ### 查询服务列表 ```bash # 通过 Webman 查询 curl http://127.0.0.1:8787/index # 直接查询 Workerman curl http://127.0.0.1:8788/ ``` ## 常见问题 ### Q: 服务调用失败? ```bash # 1. 检查 Etcd 是否启动 curl http://127.0.0.1:2379/version # 2. 检查 Workerman 是否注册成功 # 看启动输出是否有 "[Etcd] ✓ order-service" # 3. 检查 Etcd 中是否有服务 curl -s http://127.0.0.1:2379/v3/kv/range \ -d '{"key": "L3NlcnZpY2VzLw=="}' ``` ### Q: 安装 chenbool/etcd 包失败? - 确认 GitHub 仓库已创建 - 确认 Packagist 已提交或配置了 repositories