swoft微服务实战十一:服务调用初步封装client类

5. 服务调用初步封装client类:

实际开发中,对方的api是RPC、GRPC、JSONRPC、HTTP api,可以灵活的切换.

(1). swoft容器安装Guzzle:

# Install Composer
curl -sS https://getcomposer.org/installer | php
php composer.phar require guzzlehttp/guzzle

(2). client类调用http api:
app\Consul\ServiceClient.php:

namespace App\Consul;
use Swoft\Bean\Annotation\Mapping\Bean;
use Swoft\Bean\Annotation\Mapping\Inject;
/**
 * @Bean()
 */
class ServiceClient {
    const SELECT_RAND=1;
    const SELECT_IPHASH=2;
    const SELECT_ROUNDROBIN=3;
    /**
     * @Inject()
     * @var ServiceSelector
     */
    private $selector;
    private function loadService(array $serviceList, int $selectType)
    {
        switch ($selectType){
            case self::SELECT_RAND:
                return $this->selector->selectByRandom($serviceList);
            case self::SELECT_IPHASH:
                return $this->selector->selectByIPHash(ip(), $serviceList);
            default:
                return$this->selector->selectByRoundRobin($serviceList);
        }
    }
    public function call($service, $endpoint, $method="GET",$selectType=ServiceClient::SELECT_ROUNDROBIN)
    {
        // 从consul获取服务
        $getService=$this->loadService($service, $selectType);
        $client = new \GuzzleHttp\Client();
        // $endpoint类似/order/list,即path(http),后面$endpoint还要考虑RPC
        $url = "http://" . $getService["Address"] . ":" . $getService["Port"] . $endpoint;
        $response= $client->request($method, $url);
        return $response->getBody();
    }
}

(3). 提供一个order/list的api:
app\Http\Order.php:

namespace App\Http;
use Swoft\Http\Server\Annotation\Mapping\Controller;
use Swoft\Http\Server\Annotation\Mapping\RequestMapping;
use Swoft\Http\Server\Annotation\Mapping\RequestMethod;
/**
 * @Controller("order")
 */
class Order {
    /**
     * @RequestMapping(router="list", method={RequestMethod::GET})
     */
    public function list(): array
    {
        return ['order_list'];
    }
}

(4). 访问:
http://192.168.33.88:8306/order/list得到结果是[‘order_list’].

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值