PHP版本,基于Workerman的ETCD服务注册和发现
- 支持http服务
- 支持 text 协议的 rpc 服务(测试)
- 自带熔断器
- 支持 K8S service ip 自动获取,非K8S环境自动获取本地ip
composer require teamones/etcd-discovery
.env 增加
# 当前服务注册到etcd名称
belong_system='project'
# etcd服务地址
etcd_host=10.168.30.25:2379
# webman 服务端口
host_port=8080
/config/etcd.php配置
<?php
return [
'discovery' => [
'etcd_host' => env("etcd_host", ''),
'server_name' => env("belong_system", ''),
'server_uuid' => \Webpatser\Uuid\Uuid::generate()->string,
'server_port' => env("host_port", 8080),
'discovery_name' => ['im', 'saas', 'log', 'media'], // 要发现的服务名
'log' => runtime_path() . '/logs/etcd.log',
'cache' => runtime_path() . '/logs'
]
];
在start.php 增加以下代码
// Worker::$onMasterReload = function () 上面增加
// 拉起etcd服务
if (class_exists('teamones\process\EtcdGoServer')) {
\teamones\process\EtcdGoServer::exec();
// Workerman 关闭杀死 etcd服务
worker::$onMasterStop = function () {
\teamones\process\EtcdGoServer::kill();
};
}
在 /config/process.php中增加
// etcd 对象
'etcd' => [
'handler' => teamones\process\Etcd::class,
'count' => 1
],
默认使用http协议
<?php
use teamones\Request;
$data = Request::connection()
->setHeader([
'X-Userinfo' => request()->getXUserInfo(), // 一般需要传递用户信息
])
->setServerHost('im') // 请求服务名
->setRoute('options/get_business_mode') // 路由地址
->setMethod('POST') // 请求方式
->request();