• Hyperf jsonrpc 服务的搭建


    JSON-RPC,是一个无状态且轻量级的远程过程调用(RPC)传送协议,其传递内容透过 JSON 为主。
    我们需要布置两台服务,一台Provider提供服务,另外一台Consumer消费服务
     

    准备工作

    1、所需类库

    composer require hyperf/json-rpc
    composer require hyperf/rpc-server
    composer require hyperf/rpc-client
    composer require hyperf/consul
    composer require hyperf/service-governance

    2、工具

    Mac环境下
    安装consul   brew install consul 
    启动consul   brew services start consul
     

    3、Provider的配置 

    1、服务提供类
    <?php
    namespace AppRpc;
    use HyperfRpcServerAnnotationRpcService;
    /**
    * @RpcService(name="CalculatorService",protocol="jsonrpc-http",server="jsonrpc-http")
    */
    class CalculatorService implements CalculatorServiceInterface
    {
        public function add(int $a, int $b): int
        {
            return $a + $b;
        }
    public function minus(int $a, int $b): int { return $a - $b; } } 
    2、接口类
    <?php
    namespace AppRpc;
    interface CalculatorServiceInterface
    {
        public function add(int $a, int $b): int;
        public function minus(int $a, int $b): int;
    } 
     
     
    3、配置文件 service.php
    'servers' => [
        ...
        [
            'name' => 'jsonrpc-http',
            'type' => Server::SERVER_HTTP,
            'host' => '0.0.0.0',
            'port' => 9802,
            'sock_type' => SWOOLE_SOCK_TCP,
            'callbacks' => [
                SwooleEvent::ON_REQUEST => [HyperfJsonRpcHttpServer::class, 'onRequest'],
            ],
        ],
    ],
     

    3、Consumer 的配置 

    1、接口类
    <?php
    namespace AppRpc;
    interface CalculatorServiceInterface
    {
        public function add(int $a, int $b): int;
        public function minus(int $a, int $b): int;
    } 
     
    2、配置文件 services.php
    return [
        'consumers' => [
            [
                'name'    => 'CalculatorService',
                'service' => AppRpcCalculatorServiceInterface::class,
                'nodes'   => [
                    [
                       'host' => '0.0.0.0',
                        'port' => 9802
                    ],
                ],
            ],
        ],
    ]; 
    3、调用
    <?php
    namespace AppController;
    use AppRpcCalculatorServiceInterface;
    use HyperfDiAnnotationInject;
    use HyperfHttpServerAnnotationAutoController;
    /**
     * @AutoController()
     */
    class IndexController extends AbstractController
    {
        /**
         * @Inject()
         * @var CalculatorServiceInterface
         */
        private $calculatorService;
    
        public function rpc()
        {
            return $this->calculatorService->minus(10,2);
        }
    }

    4、使用consul 

    如果需要使用 consul来管理服务,则需要做如下操作

    1).修改Provider具体的服务类,注解添加属性 publishTo
    /**
    * @RpcService(name="CalculatorService",protocol="jsonrpc-http",server="jsonrpc-http",publishTo="consul") 
    */
    2).Provider服务发布
    php bin/hyperf.php vendor:publish hyperf/consul

    执行完毕后会形成一个配置文件 consul.php

    3).Conusmer修改配置

    return [
        'consumers' => [
            [
                'name'    => 'CalculatorService',
                'service' => AppRpcCalculatorServiceInterface::class,
           registry' => [

    'protocol' => 'consul',
                    'address' => 'http://127.0.0.1:8500',//对应Provider 中  consul.php配置项
                ]
         ], 
      ]
    ,
    ];
    4)重新启动Provider和Consumer
  • 相关阅读:
    NFS(Network File System)即网络文件系统 (转)
    抓包神器 tcpdump 使用介绍 (转)
    sms短信网关对接
    spring 事务的传播级别和隔离级别
    持续集成是什么?
    理解Cookie和Session机制
    使用df -h命令查看磁盘空间使用率不算高,还有很多空余空间,但是创建文件或写入数据时一直报错磁盘写满
    删除文件后,磁盘空间没有释放的处理记录
    Springboot启动原理解析
    使用idea创建springboot项目
  • 原文地址:https://www.cnblogs.com/bobobobobo/p/13093794.html
Copyright © 2020-2023  润新知