EasySwoole支持RPC服务。
具体配置可参考官方文档。
这里说一下自己在配置中的心得。
官方文档中是将Server端和Client端放在同一个服务器上,而实际情况下它俩是分开的。
自己的实践:
- Server1提供Goods服务
- Server2提供Common服务
- Client1去请求Server1和Server2
其它文件都一样,主要是EasySwooleEvent.php
的配置。
Server1:
/*
* 定义节点Redis管理器
*/
$redisPool = new RedisPool(new RedisConfig([
'host'=>'127.0.0.1'
]));
$manager = new RedisManager($redisPool);
//配置Rpc实例
$config = new RpcConfig();
//这边用于指定当前服务节点ip,如果不指定,则默认用UDP广播得到的地址
$config->setServerIp('127.0.0.1');
$config->setListenPort(9500);
$config->setNodeManager($manager);
/*
* 配置初始化
*/
Rpc::getInstance($config);
//添加服务
Rpc::getInstance()->add(new Goods());
Rpc::getInstance()->attachToServer(ServerManager::getInstance()->getSwooleServer());
Server2:
/*
* 定义节点Redis管理器
*/
$redisPool = new RedisPool(new RedisConfig([
'host'=>'127.0.0.1'
]));
$manager = new RedisManager($redisPool);
//配置Rpc实例
$config = new RpcConfig();
//这边用于指定当前服务节点ip,如果不指定,则默认用UDP广播得到的地址
$config->setServerIp('127.0.0.1');
$config->setListenPort(9500);
$config->setNodeManager($manager);
/*
* 配置初始化
*/
Rpc::getInstance($config);
//添加服务
Rpc::getInstance()->add(new Common());
Rpc::getInstance()->attachToServer(ServerManager::getInstance()->getSwooleServer());
Client1:
/*
* 定义节点Redis管理器
*/
$redisPool = new RedisPool(new RedisConfig([
'host'=>'127.0.0.1'
]));
$manager = new RedisManager($redisPool);
//配置Rpc实例
$config = new RpcConfig();
//这边用于指定当前服务节点ip,如果不指定,则默认用UDP广播得到的地址
$config->setNodeManager($manager);
Rpc::getInstance($config);
以上代码的说明
- Server1、Server2、Client1都配置了RPC的节点管理器
- Server1只配置了Goods服务
- Server2只配置了Common服务
- Client1没有配置服务
RPC
服务解决的问题
- 分布式服务部署
- 服务的注册与发现
- 服务接口的请求调用