Rpc-Client

控制器聚合调用

  1. namespace App\HttpController;
  2. use EasySwoole\Http\AbstractInterface\Controller;
  3. use EasySwoole\Rpc\Response;
  4. use EasySwoole\Rpc\Rpc;
  5. class Index extends Controller
  6. {
  7. function index()
  8. {
  9. $ret = [];
  10. $client = Rpc::getInstance()->client();
  11. /*
  12. * 调用商品列表
  13. */
  14. $client->addCall('goods','list',['page'=>1])
  15. ->setOnSuccess(function (Response $response)use(&$ret){
  16. $ret['goods'] = $response->toArray();
  17. })->setOnFail(function (Response $response)use(&$ret){
  18. $ret['goods'] = $response->toArray();
  19. });
  20. /*
  21. * 调用信箱公共
  22. */
  23. $client->addCall('common','mailBox')
  24. ->setOnSuccess(function (Response $response)use(&$ret){
  25. $ret['mailBox'] = $response->toArray();
  26. })->setOnFail(function (Response $response)use(&$ret){
  27. $ret['mailBox'] = $response->toArray();
  28. });
  29. /*
  30. * 获取系统时间
  31. */
  32. $client->addCall('common','serverTime')
  33. ->setOnSuccess(function (Response $response)use(&$ret){
  34. $ret['serverTime'] = $response->toArray();
  35. });
  36. $client->exec(2.0);
  37. $this->writeJson(200,$ret);
  38. }
  39. }

注意,控制器中可以这样调用,是因为服务端章节中,在EasySwoole的全局启动事件已经对当前的Rpc实例定义注册了节点管理器。因此在控制器中调用的时候 该Rpc实例可以找到对应的节点。一般来说,在做聚合网关的节点,是不需要注册服务进去的,仅需注册节点管理器即可。

客户端

当rpc服务和客户端不在同一服务中时,并且服务端客户端使用的都是es

  1. <?php
  2. require_once 'vendor/autoload.php';
  3. use EasySwoole\Rpc\Config;
  4. use EasySwoole\Rpc\Rpc;
  5. use EasySwoole\Rpc\NodeManager\RedisManager;
  6. use EasySwoole\Rpc\Response;
  7. $redisConfig = new \EasySwoole\Redis\Config\RedisConfig();
  8. $redisConfig->setHost('127.0.0.1'); // 服务端使用的redis节点地址
  9. $redisConfig->setPort('6379'); // 服务端使用的redis节点端口
  10. $pool=new \EasySwoole\RedisPool\RedisPool($redisConfig);
  11. $config = new Config();
  12. $config->setServerIp('127.0.0.1'); // 指定rpc服务地址
  13. $config->setListenPort(9502); // 指定rpc服务端口
  14. $config->setNodeManager(new RedisManager($pool));
  15. $rpc = new Rpc($config);
  16. \Swoole\Coroutine::create(function () use ($rpc) {
  17. $client = $rpc->client();
  18. $client->addCall('UserService', 'register', ['arg1', 'arg2'])
  19. ->setOnFail(function (Response $response) {
  20. print_r($response->toArray());
  21. })
  22. ->setOnSuccess(function (Response $response) {
  23. print_r($response->toArray());
  24. });
  25. $client->exec();
  26. });
  27. swoole_timer_clear_all();