hyperf json-rpc

安装

安装docker hyperf

安装 hyperf-rpc-server-v8 (服务端)

docker run --name hyperf-rpc-server-v8 \
-v /www/docker/hyperf-rpc-server:/data/project \
-w /data/project \
-p 9508:9501 -it \
--privileged -u root \
--entrypoint /bin/sh \
hyperf/hyperf:8.1-alpine-v3.18-swoole

安装 hyperf-rpc-client-v8 (客户端)

docker run --name hyperf-rpc-client-v8 \
-v /www/docker/hyperf-rpc-client:/data/project \
-w /data/project \
-p 9509:9501 -it \
--privileged -u root \
--entrypoint /bin/sh \
hyperf/hyperf:8.1-alpine-v3.18-swoole

(一)创建配置中心服务

安装nacos配置中心

composer require hyperf/config-center
composer require hyperf/config-nacos

配置文件config/aoutload/config_center.php
注意:
这里的
'group_name' => 'DEFAULT_GROUP', 对应注册中心的 Group
'namespace_id' => 'public', 对应注册中心的 命名空间 public

<?phpdeclare(strict_types=1);
/*** This file is part of Hyperf.** @link     https://www.hyperf.io* @document https://hyperf.wiki* @contact  group@hyperf.io* @license  https://github.com/hyperf/hyperf/blob/master/LICENSE*/
use Hyperf\ConfigCenter\Mode;use function Hyperf\Support\env;return ['enable' => (bool) env('CONFIG_CENTER_ENABLE', true),'driver' => env('CONFIG_CENTER_DRIVER', 'nacos'),'mode' => env('CONFIG_CENTER_MODE', Mode::PROCESS),'drivers' => ['nacos' => ['driver' => Hyperf\ConfigNacos\NacosDriver::class,'merge_mode' => Hyperf\ConfigNacos\Constants::CONFIG_MERGE_OVERWRITE,'interval' => 3,'default_key' => 'nacos_config','listener_config' => [// dataId, group, tenant, type, content'nacos_config' => ['tenant' => 'public', // corresponding with service.namespaceId'data_id' => 'config_user','group' => 'DEFAULT_GROUP',],'nacos_config.data' => ['data_id' => 'config_user','group' => 'DEFAULT_GROUP','type' => 'json',],'nacos_config.member' => ['data_id' => 'member','group' => 'DEFAULT_GROUP','type' => 'json',],],'client' => [// nacos server url like https://nacos.hyperf.io, Priority is higher than host:port// 'uri' => '','host' => '10.0.0.94','port' => 8848,'username' => null,'password' => null,'guzzle' => ['config' => null,]],],],
];

在这里插入图片描述

nacos配置文件

在这里插入图片描述
在这里插入图片描述

结果

在这里插入图片描述

控制器调用

    public function index(){$user = $this->request->input('user', 'Hyperf');$method = $this->request->getMethod();$v = \Hyperf\Config\config('nacos_config');var_dump($v);return ['method' => $method,'message' => "Hello {$user}.",];}

(二)创建服务发现项目

composer create-project hyperf/hyperf-skeleton

服务端

安装json-rpc

如果没安装请先安装相关的插件

composer require hyperf/json-rpc

安装rpc-server

要使用 JSON RPC 服务端:

composer require hyperf/rpc-server

安装service-governance-nacos

composer require hyperf/service-governance-nacos

或指定版本

composer require hyperf/service-governance-nacos:v2.2.39

server.php配置文件

['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'],],'options' => [// Whether to enable request lifecycle event'enable_request_lifecycle' => false,],],

在这里插入图片描述

nacos注册中心,推服务到注册中心,servers.php

注意:
这里的
'group_name' => 'DEFAULT_GROUP', 对应注册中心的 Group
'namespace_id' => 'public', 对应注册中心的 命名空间 public

<?php
/*** services.php** Created on 2024-08-27-14:30* Created by xxp 332410549@qq.com*/return ['enable' => [// 开启服务发现'discovery' => true,// 开启服务注册'register' => true,],// 服务消费者相关配置'consumers' => [],// 服务提供者相关配置'providers' => [],// 服务驱动相关配置'drivers' => [//consul注册中心驱动'consul' => ['uri' => 'http://127.0.0.1:8500','token' => '','check' => ['deregister_critical_service_after' => '90m','interval' => '1s',],],// 注册 nacos 服务发现驱动'nacos' => ['host' => '10.0.0.94','port' => 8848,// The nacos account info'username' => null,'password' => null,'guzzle' => ['config' => null,],'group_name' => 'DEFAULT_GROUP','namespace_id' => 'public','heartbeat' => 5,'ephemeral' => false, // 是否注册临时实例],],
];

在这里插入图片描述

查看结果

在这里插入图片描述

消费端

安装

安装json-rpc

如果没安装请先安装相关的插件

composer require hyperf/json-rpc
安装rpc-client

要使用 JSON RPC 客户端:

composer require hyperf/rpc-client
安装service-governance-nacos
composer require hyperf/service-governance-nacos

或指定版本

composer require hyperf/service-governance-nacos:v2.2.39

自动创建代理消费者类

不常用,可以看下面的配置复用

<?php
return [// 此处省略了其它同层级的配置'consumers' => [[// name 需与服务提供者的 name 属性相同'name' => 'CalculatorService',// 服务接口名,可选,默认值等于 name 配置的值,如果 name 直接定义为接口类则可忽略此行配置,如 name 为字符串则需要配置 service 对应到接口类'service' => \App\Interfaces\CalculatorServiceInterface::class,// 对应容器对象 ID,可选,默认值等于 service 配置的值,用来定义依赖注入的 key'id' => \App\Interfaces\CalculatorServiceInterface::class,// 服务提供者的服务协议,可选,默认值为 jsonrpc-http// 可选 jsonrpc-http jsonrpc jsonrpc-tcp-length-check'protocol' => 'jsonrpc-http',// 负载均衡算法,可选,默认值为 random'load_balancer' => 'random',// 这个消费者要从哪个服务中心获取节点信息,如不配置则不会从服务中心获取节点信息'registry' => ['protocol' => 'nacos','address' => 'http://10.0.0.94:8848',],// 如果没有指定上面的 registry 配置,即为直接对指定的节点进行消费,通过下面的 nodes 参数来配置服务提供者的节点信息'nodes' => [['host' => '127.0.0.1', 'port' => 9504],],// 配置项,会影响到 Packer 和 Transporter'options' => ['connect_timeout' => 5.0,'recv_timeout' => 5.0,'settings' => [// 根据协议不同,区分配置'open_eof_split' => true,'package_eof' => "\r\n",// 'open_length_check' => true,// 'package_length_type' => 'N',// 'package_length_offset' => 0,// 'package_body_offset' => 4,],// 重试次数,默认值为 2,收包超时不进行重试。暂只支持 JsonRpcPoolTransporter'retry_count' => 2,// 重试间隔,毫秒'retry_interval' => 100,// 使用多路复用 RPC 时的心跳间隔,null 为不触发心跳'heartbeat' => 30,// 当使用 JsonRpcPoolTransporter 时会用到以下配置'pool' => ['min_connections' => 1,'max_connections' => 32,'connect_timeout' => 10.0,'wait_timeout' => 3.0,'heartbeat' => -1,'max_idle_time' => 60.0,],],]],
];

配置复用

通常来说,一个服务消费者会同时消费多个服务提供者,当我们通过服务中心来发现服务提供者时, config/autoload/services.php 配置文件内就可能会重复配置很多次 registry 配置,但通常来说,我们的服务中心可能是统一的,也就意味着多个服务消费者配置都是从同样的服务中心去拉取节点信息,此时我们可以通过 PHP 变量 或 循环 等 PHP 代码来实现配置文件的生成。

通过 PHP 变量生成配置
<?php
$registry = ['protocol' => 'consul','address' => 'http://127.0.0.1:8500',
];
return [// 下面的 FooService 和 BarService 仅示例多服务,并不是在文档示例中真实存在的'consumers' => [['name' => 'FooService','registry' => $registry,],['name' => 'BarService','registry' => $registry,]],
];
通过循环生成配置
<?php
return [// 此处省略了其它同层级的配置'consumers' => value(function () {$consumers = [];// 这里示例自动创建代理消费者类的配置形式,顾存在 name 和 service 两个配置项,这里的做法不是唯一的,仅说明可以通过 PHP 代码来生成配置// 下面的 FooServiceInterface 和 BarServiceInterface 仅示例多服务,并不是在文档示例中真实存在的$services = ['FooService' => App\JsonRpc\FooServiceInterface::class,'BarService' => App\JsonRpc\BarServiceInterface::class,];foreach ($services as $name => $interface) {$consumers[] = ['name' => $name,'service' => $interface,'registry' => ['protocol' => 'consul','address' => 'http://127.0.0.1:8500',]];}return $consumers;}),
];

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/52940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Upload-LABS通关攻略【1-20关】

Pass-01 第一关是前端JS绕过 上传一个php文件显示只能上传特定后缀名的文件 这里将1.php改为1.jpg直接进行抓包&#xff0c;在数据包中将jpg改为php放行 文件上传成功&#xff0c;邮件图片新建页面打开 可以访问到1.php文件&#xff0c;则一句话密码上传成功 使用蚁剑 进行连接…

Redux的中间件原理分析

Redux的中间件原理分析 redux的中间件对于使用过redux的各位都不会感到陌生&#xff0c;通过应用上我们需要的所有要应用在redux流程上的中间件&#xff0c;我们可以加强dispatch的功能。最近抽了点时间把之前整理分析过的中间件有关的东西放在这里分享分享。本文只对中间件涉…

音视频开发之旅(90)-Vision Transformer论文解读与源码分析

目录 1.背景和问题 2.Vision Transformer(VIT)模型结构 3.Patch Embedding 4.实现效果 5.代码解析 6.资料 一、背景和问题 上一篇我们学习了Transformer的原理&#xff0c;主要介绍了在NLP领域上的应用&#xff0c;那么在CV(图像视频)领域该如何使用&#xff1f; 最直观…

算法复盘——LeetCode hot100:哈希

文章目录 哈希表哈希表的基本概念哈希表的使用1. 插入操作2. 查找操作3. 删除操作 哈希表的优点和缺点1.两数之和复盘 242.有效的字母异位词复盘 49.字母异位词分组复盘 128. 最长连续序列复盘HashSet 哈希表 先来搞清楚什么是哈希表吧~ 概念不清楚方法不清楚怎么做题捏 哈希表…

使用mysql保存密码

登录MySQL 这行命令告诉MySQL客户端程序用户root准备登录&#xff0c;-p表示告诉 MySQL 客户端程序提示输入密码。 mysql -u root -p创建数据库 create database wifi; use wifi;create table password(user_password CHAR(8),primary key(user_password));源码 代码编译 …

QT实战项目之音乐播放器

项目效果演示 myMusicShow 项目概述 在本QT音乐播放器实战项目中&#xff0c;开发环境使用的是QT Creator5.14版本。该项目实现了音乐播放器的基本功能&#xff0c;例如开始播放、停止播放、下一首播放、上一首播放、调节音量、调节倍速、设置音乐播放模式等。同时还具备搜索功…

Centos 下载和 VM 虚拟机安装

1. Centos 下载 阿里云下载地址 centos-7.9.2009-isos-x86_64安装包下载_开源镜像站-阿里云 2. VM 中创建 Centos 虚拟机 2.1 先打开 VM 虚拟机&#xff0c;点击首页的创建新的虚拟机 2.2 选择自定义&#xff0c;然后点击下一步。 2.3 这里默认就好&#xff0c;继续选择下一…

gitlab SSH的使用

一、 安装git bash https://git-scm.com/download/win 下载windows 版本&#xff0c;默认安装即可。 二、使用命令 打开本地git bash,使用如下命令生成ssh公钥和私钥对 ssh-keygen -t rsa -C ‘xxxxxx.com’ 然后一路回车 (-C 参数是你的邮箱地址) 若是想输入密码可以输入…

算法-最长连续序列

leetcode的题目链接 这道题的思路主要是要求在O&#xff08;n)的时间复杂度下&#xff0c;所以你暴力解决肯定不行&#xff0c;暴力至少两层for循环&#xff0c;所以要在O&#xff08;n)的时间复杂度下&#xff0c;你可以使用HashSet来存储数组&#xff0c;对于每个数字&#…

黑马JavaWeb开发笔记07——Ajax、Axios请求、前后端分离开发介绍、Yapi详细配置步骤

文章目录 前言一、Ajax1. 概述2. 作用3. 同步异步4. 原生Ajax请求&#xff08;了解即可&#xff09;5. Axios&#xff08;重点&#xff09;5.1 基本使用5.2 Axios别名&#xff08;简化书写&#xff09; 二、前后端分离开发1. 介绍1.1 前后台混合开发1.2 前后台分离开发方式&…

Docker续6:容器网络

1.bridge-utils 一个用于Linux系统的网络桥接工具集。它提供了一些命令行工具&#xff0c;帮助用户创建、管理和配置网络桥接。网络桥接是一种将多个网络接口连接在一起&#xff0c;以使它们能够作为单个网络段进行通信的技术。 bridge-utils 常用的命令包括&#xff1a; b…

【 OpenHarmony 系统应用源码魔改 】-- Launcher 之「桌面布局定制」

前言 阅读本篇文章之前&#xff0c;有几个需要说明一下&#xff1a; 调试设备&#xff1a;平板&#xff0c;如果你是开发者手机&#xff0c;一样可以加 Log 调试&#xff0c;源码仍然是手机和平板一起分析&#xff1b;文章中的 Log 信息所显示的数值可能跟你的设备不一样&…

单片机编程魔法师-并行多任务程序

程序架构 程序代码 小结 数码分离&#xff0c;本质上就是将数据和代码逻辑进行分离&#xff0c;跟第一章使用数据驱动程序一样的道理。 不过这里不同之处在于。这里使用通过任务线程&#xff0c;但是却有2个任务在运行&#xff0c;两个任务都通过先初始化任务数据参数&#x…

SQLite的安装和使用

一、官网链接下载安装包 点击跳转 步骤&#xff1a;点击安装这个红框的dll以及红框下面的tools &#xff08;如果有navicat可以免上面这个安装步骤&#xff0c;安装上面这个是为了能在命令行敲SQL而已&#xff09; 二、SQLite的特点 嵌入的&#xff08;无服务器的&#x…

hello树先生——AVL树

AVL树 一.什么是AVL树二.AVL树的结构1.AVL树的节点结构2.插入函数3.旋转调整 三.平衡测试 一.什么是AVL树 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率低下。…

python学习——爬虫之session请求处理cookie

import requestssessionrequests.session() url"https://passport.17k.com/ck/user/login" data{"loginName": "19139186287","password":"2001022600hzk"} ressession.post(url,datadata) print(res.text)# session通过会话…

Windows系统中批量管理Windows服务器远程桌面工具——RDCMan

一、背景 在公司没有部署对应的堡垒机系统之前,做运维测试工作的人员,需要管理大量的服务器,每天需要对服务器进行必要的巡检、系统更新发布等内容,特别是有很多Windows服务器的时候,如果我们使用Windows自带的“远程桌面连接”只能一台台连接,比较繁琐。并且不能知道那台…

【手撕数据结构】二叉树的性质

目录 叶子节点和边的性质概念小试牛刀 叶子节点和边的性质 概念 可以看到度为0的节点如F没有边&#xff0c;度为1的节点如C有一条边&#xff0c;而度为2的节点如B有两条边。那么设度为2的节点为a个&#xff0c;度为1的节点为b个。二叉树边 2ab另⼀⽅⾯&#xff0c;由于共有 a…

AcWing 897. 最长公共子序列

动态规划就是多见识应用题就完事儿了&#xff0c;也没有什么好说的。 讲解参考&#xff1a; 【E05 线性DP 最长公共子序列】 #include<iostream> #include<algorithm> #define N 1010 using namespace std; char a[N],b[N]; int n,m; int f[N][N]; int main(){…

Loki Unable to fetch labels from Loki (no org id)

应该是多租户相关导致的 参考文档: 参考文档cMulti-tenancy | Grafana Loki documentationDescribes how Loki implements multi-tenancy to isolate tenant data and queries.https://grafana.com/docs/loki/latest/operations/multi-tenancy/ https://github.com/grafana…