EasySwoole RPC服务

EasySwoole支持RPC服务。

具体配置可参考官方文档。

这里说一下自己在配置中的心得。

官方文档中是将Server端和Client端放在同一个服务器上,而实际情况下它俩是分开的。

自己的实践:

  1. Server1提供Goods服务
  2. Server2提供Common服务
  3. 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);

以上代码的说明

  1. Server1、Server2、Client1都配置了RPC的节点管理器
  2. Server1只配置了Goods服务
  3. Server2只配置了Common服务
  4. Client1没有配置服务

RPC服务解决的问题

  1. 分布式服务部署
  2. 服务的注册与发现
  3. 服务接口的请求调用

Leave a Comment

豫ICP备19001387号-1