首页 > 其他分享 >hyperf 创建 JSON RPC 服务

hyperf 创建 JSON RPC 服务

时间:2023-07-20 17:26:35浏览次数:28  
标签:服务 require JSON nacos hyperf composer RPC

JSON RPC 服务

hyperf 框架为 PHP 打开了微服务的大门,而服务之间相互调用,又以 RPC 为基础。所以这个章节非常重要。但官方文档还是有些坑的,我以前就在这儿踩过坑。这里省略了接口类,只保留最主要的部分。

 

安装依赖

composer require hyperf/json-rpc
composer require hyperf/rpc-server
composer require hyperf/rpc-client

 

添加 JSON RPC Server 服务器
config/autoload/server.php

<?php

use Hyperf\Server\Server;
use Hyperf\Server\Event;

return [

    // 这里省略了该文件的其它配置
    'servers' => [
        [
            'name' => 'jsonrpc-http',
            'type' => Server::SERVER_HTTP,
            'host' => '0.0.0.0',
            'port' => 9504,
            'sock_type' => SWOOLE_SOCK_TCP,
            'callbacks' => [
                Event::ON_REQUEST => [\Hyperf\JsonRpc\HttpServer::class, 'onRequest'],
            ],
        ],
    ],

];

 

配置注册服务中心,可以选择使用 nacos 或者 consul,这里选择 nacos

composer require hyperf/service-governance-nacos
composer require hyperf/service-governance-consul


config/autoload/services.php 添加配置

<?php
return [
    'enable' => [
        'discovery' => true,
        'register' => true,
    ],
    'consumers' => [

         // 配置服务消提供者
         [
            'name' => 'UserService', //服务名称
            'service' => \App\JsonRpc\UserService::class,
            'protocol' => 'jsonrpc-http',
            'registry' => [
                'protocol' => 'nacos',
                'address' => 'http://127.0.0.1:8848',
            ],
        ],

    ],

    'providers' => [],

    'drivers' => [
        'nacos' => [
            'host' => '127.0.0.1',
            'port' => 8848,
            'username' => null,
            'password' => null,
        ],

    ],
];

 

 定义服务提供者类

<?php
namespace App\JsonRpc;

use Hyperf\RpcServer\Annotation\RpcService;

// 注解中的的 publishTo 表示要发布的服务中心
#[RpcService(name: "UserService", protocol: "jsonrpc-http", server: "jsonrpc-http", publishTo:"nacos")]
class UserService {

    public function add(int $a, int $b):int
    {
        return $a + $b;
    }

}

 

定义服务消费者类

<?php

namespace App\JsonRpc;
use Hyperf\RpcClient\AbstractServiceClient;

class UserServiceClient extends AbstractServiceClient {

    protected string $serviceName = 'UserService';

    protected string $protocol = 'jsonrpc-http';

    public function add(int $a, int $b):int
    {
        return $this->__request(__FUNCTION__, compact('a', 'b'));
    }

}

在控制器中使用务消费者类

<?php
declare(strict_types=1);
namespace App\Controller;
use App\JsonRpc\UserServiceClient;
use Hyperf\Context\ApplicationContext;
use Hyperf\HttpServer\Annotation\GetMapping;
use Hyperf\HttpServer\Annotation\Controller;
use Hyperf\HttpServer\Contract\RequestInterface;


#[Controller]
class IndexController extends AbstractController
{

   // http://localhost:9501/index/test
    #[GetMapping(path: "test")]
    public function test()
    {
        $client = ApplicationContext::getContainer()->get(UserServiceClient::class);
        $sum = $client->add(13, 12);
        return $sum;
    }


}

nacos 参考:
https://nacos.io/zh-cn/docs/v2/quickstart/quick-start.html

直接下载 zip包,解压后,进入 bin 目录 执行 bash startup.sh -m standalone

 

启动服务

php bin/hyperf.php start

访问:http://localhost:9501/index/test

 

测试时,一定要保证你的 nacos 是启动成功的状态。

 

标签:服务,require,JSON,nacos,hyperf,composer,RPC
From: https://www.cnblogs.com/zbseoag/p/17568917.html

相关文章

  • java json转整形数组
    Java中Json转整型数组的方法在Java中,我们经常需要处理Json数据。Json是一种轻量级的数据交换格式,广泛应用于数据传输和配置文件中。在某些情况下,我们需要将Json中的数据转换为整型数组来进行进一步处理。本文将介绍如何在Java中将Json转换为整型数组,并提供相应的代码示例。使用Ja......
  • gRPC如何保障数据安全传输
    什么是gRPC?gRPC是由Google开发的高性能、开源的RPC(RemoteProcedureCall)框架,用于在客户端和服务器之间进行通信。它基于ProtocolBuffers(protobuf)进行消息序列化和反序列化,支持多种通信协议,如HTTP/2、TCP和gRPC提供的协议。gRPC的安全需求在现代网络环境中,数据的安......
  • javascript中json 对象 数组之间相互转化的示例
    在JavaScript中,你可以使用JSON.stringify()将JSON对象转换为JSON字符串,使用JSON.parse()将JSON字符串转换为JSON对象。而要将JSON对象转换为数组,可以使用Object.values()方法,而要将数组转换为JSON对象,可以使用Array.reduce()方法。下面是这些转换的示例代码:将JSON对象转换为JSON......
  • java正则表达式截取json
    Java正则表达式截取JSON介绍JSON(JavaScriptObjectNotation)是一种常用的数据格式,用于在不同的编程语言之间传递和存储数据。在Java中,我们经常需要从JSON数据中提取特定的信息,这时候正则表达式就可以派上用场。正则表达式是一种强大的文本匹配工具,可以让我们通过模式匹配来提取需......
  • 将json格式的数据快速转换为excel,使用在线工具轻松搞定
    标准的json数据是可以转成excel表格方便阅读的,excel是行列的数据表格也可以转换成json格式数据。 https://uutool.cn/json2excel/ 只要把需要转换的json复制到工具框内,点击转换按钮即可秒转成excel文件。 本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。首发......
  • mq json转换器 JSON泛型反序列化, 多层嵌套,使用 TypeReference
     需求解析JSON,并将其转换为对应的数据结构。例如:转换为Map<String,Object>  ......
  • 使用 Apache SeaTunnel 实现 Kafka Source 解析复杂Json 案例
    版本说明:SeaTunnel:apache-seatunnel-2.3.2-SNAPHOT引擎说明:Flink:1.16.2Zeta:官方自带前言近些时间,我们正好接手一个数据集成项目,数据上游方是给我们投递到Kafka,我们一开始的技术选型是SpringBoot+Flink对上游数据进行加工处理(下文简称:方案一),由于测试不到位,后来到线上,发现......
  • android 加载assets 本地json
    Android加载Assets本地JSON的实现作为一名经验丰富的开发者,我很荣幸能够教会你如何在Android应用中加载本地JSON文件。下面我将逐步介绍整个实现过程,并提供相应的代码示例和注释。实现步骤首先,我们来看一下加载Assets本地JSON的实现步骤:步骤说明1获取AssetsManager对......
  • android 遍历json串
    Android遍历JSON串的流程在Android开发中,我们经常会使用JSON(JavaScriptObjectNotation)作为数据交换的格式。遍历JSON串是一项基本的开发技能,它可以帮助我们在应用程序中获取和使用JSON数据。下面是遍历JSON串的基本流程:步骤描述步骤一创建JSON对象或解析JSON字符串......
  • JSONP方式解决跨域
     <script>//封装一个jsonp函数functionjsonp({url,params,callback}){returnnewPromise((resolve,reject)=>{//定义回调函数window[callback]=function(data){resolve(data)}......