3.微服务-RPC解析及封装


RPC:远程过程调用,说白了就是可以从这个服务器,调用另一个服务器的函数方法,跟api不同,api需要三次握手,rpc可以通过tcp,upd,http协议进行服务器间的通讯,rpc遵循rpc协议,过程分为打包数据,发送数据,解压数据,返回数据,而对于开发者来说,使用方法跟调用本地的函数方法是一样的

一、RPC启动之前准备

1.1、配置文件启动的时候,通过指定要启动的监听服务,使用多端口监听的方式启动rpc服务,并且会每个组件里的AutoLoader.php文件,调用加载beans方法所返回的信息,放入到bean容器当中
在这里插入图片描述
其中src/AutoLoader.php 是每一个组件必须存在的文件,swoft依据它来确定要扫描的目录
在这里插入图片描述
1.2、Client启动时通过控制器当中的接口注解,去访问rpc服务,所以框架启动时通过代理类解析接口注解,并且加载对象附加到容器当中,在调用时可以从容器当中获取并且调用

在这里插入图片描述

二、RPC启动之后的流程

2.1当rpc请求过来之后触发dispatch
在这里插入图片描述
2.2在服务分发类当中调用serviceHandle处理请求
在这里插入图片描述
2.3请求在handle当中对应加载中间件去处理
在这里插入图片描述
2.4 匹配路由,看当前服务器是否有对应路由
在这里插入图片描述
2.4通过获取发送过来的打包数据,决定调用相应的接口方法
在这里插入图片描述

三、封装RPC组件

Swoft框架因为设计思想的原因,目前在做减法,所以对于服务发现这块没有支持,所以我们需要为此框架提供服务发现的机制。
3.1、为rpc框架引入服务提供者
通过继承RPC组件的client类,修改rpc的服务提供者,可以在其它的机器上提供相同的服务
在这里插入图片描述
另外的问题是,如何查找到相同服务的,不同服务所在的地址?
把bean的rpc客户端换成自己定义的

'pay'       => [
        'class'   => App\Rpc\Client\Client::class,//改成自己定义的class
        'host'    => '127.0.0.1',
        'port'    => 9508,
        'setting' => [
            'timeout'         => 0.5,
            'connect_timeout' => 1.0,
            'write_timeout'   => 10.0,
            'read_timeout'    => 0.5,
        ],
        'packet'  => \bean('rpcClientPacket')
    ],

Client.php


<?php

namespace App\Rpc\Client;

use Swoft\Rpc\Client\Contract\ProviderInterface;

class Client extends \Swoft\Rpc\Client\Client
{
    public function getProvider(): ?ProviderInterface
    {
        return $this->provider=new Provider();
    }
}

provider.php

<?php
namespace App\Rpc\Client;


use Swoft\Rpc\Client\Contract\ProviderInterface;

class Provider implements ProviderInterface
{
    protected  $serviceName;
     public function __construct($serviceName)
     {
         $this->serviceName=$serviceName;
     }

    public  function  getList(): array
     {

          //var_dump($this->serviceName);
          //  bean('consulProvider')->getServerList($this->serviceName);
          //负载均衡,缓存地址
          //根据服务名称consul当中获取动态地址
          return ["127.0.0.1:9508","127.0.0.1:9508"];
     }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值