Hyperf 本身不提供开箱即用的 RPC 集群部署功能,但通过 JSON RPC 或 gRPC 组件配合 Consul 等注册中心,可快速构建可扩展微服务集群;推荐生产用 gRPC、开发用 JSON RPC,并借助服务治理实现自动注册发现与负载均衡。

Hyperf 本身不提供“开箱即用”的 RPC 集群部署功能,但它的 JSON RPC 和 gRPC 组件天然支持服务注册、发现与远程调用,配合 Consul、ETCD 或 Nacos 等注册中心,就能在 Linux 上快速构建可横向扩展的 RPC 微服务集群。关键不在“装集群”,而在理清角色分工 + 正确配置通信链路。
RPC 协议选型与适用场景
Hyperf 官方主推两种 RPC 方式:
- JSON RPC:基于 HTTP/1.1,调试友好、兼容性强,适合内部系统间轻量互通,无需额外协议栈
- gRPC:基于 HTTP/2 + Protocol Buffers,性能高、强类型、支持流式通信,适合高频、低延迟、跨语言场景(如 PHP 服务调用 Go 微服务)
不建议混用;生产环境优先选 gRPC(需 Protobuf 扩展),开发验证可先用 JSON RPC 快速跑通。
搭建注册中心(以 Consul 为例)
Consul 轻量、自带健康检查和 KV 存储,适合中小规模集群:
# Ubuntu/Debian 下一键安装 curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -sc) main" sudo apt update && sudo apt install consul # 启动单节点开发模式(生产请用 server 模式+多节点) consul agent -dev -client=0.0.0.0 -bind=127.0.0.1 -ui -http-port=8500
访问 http://localhost:8500 可查看服务列表。Hyperf 服务启动后会自动注册(需配置 hyperf/service-governance-consul 组件)。
Hyperf 服务端启用 RPC 并注册
-
安装必要组件:
cd myapp composer require hyperf/rpc-server hyperf/service-governance-consul hyperf/json-rpc # 或换为 gRPC:composer require hyperf/grpc-server hyperf/grpc-client
-
配置
config/autoload/services.php:return [ 'default' => [ 'driver' => \Hyperf\ServiceGovernanceConsul\Driver::class, 'nodes' => [['host' => '127.0.0.1', 'port' => 8500]], ], ]; -
在
config/autoload/rpc_server.php中启用对应协议:// JSON RPC 示例 'servers' => [ 'jsonrpc-http' => [ 'name' => 'jsonrpc-http', 'type' => 'http', 'host' => '0.0.0.0', 'port' => 9503, 'exporter' => [ 'type' => 'jsonrpc-http', 'driver' => \Hyperf\JsonRpc\HttpExporter::class, ], ], ], -
编写一个简单 RPC 接口:
// app/Service/CalculatorServiceInterface.php interface CalculatorServiceInterface { public function add(int $a, int $b): int; }实现类加
@RpcService注解并声明协议类型,启动时自动注册到 Consul。
客户端调用远程服务
客户端项目同样需引入 service-governance-consul 和对应 client 包(如 json-rpc)。配置 config/autoload/rpc_client.php 指向注册中心,然后直接注入接口即可:
class IndexController extends AbstractController
{
public function index(CalculatorServiceInterface $calculator)
{
return $calculator->add(1, 2); // 自动负载均衡,调用任意在线节点
}
} Hyperf 会从 Consul 拉取可用节点列表,按权重或轮询策略分发请求。
集群扩缩容与健康保障
- 新增服务实例:只需保证同一 Consul 网络下,启动新 Hyperf 进程,它会自动注册、上报心跳
- 下线节点:Consul 默认 30 秒未响应即标记为不可用,客户端自动剔除该地址
- 建议补充:用 Supervisor 或 systemd 管理每个服务进程,防止崩溃退出;Nginx 做统一入口(非必须,RPC 调用通常直连)
不复杂但容易忽略。


















