小工具      在线工具  汉语词典  dos游戏  css  js  c++  java

go-zero的rpc服务案例解析

# go-zero,golang,rpc,开发语言 额外说明

收录于:17天前

go-zero的远程调用服务是基于gRpc的gRPC 教程和应用

zero使用使用gRpc需要安装protoc插件,因为gRpc基于protoc插件使用protocol buffers文件生成rpc服务器和api的代码的。

gRPC的代码生成同样依赖protoc-gen-go和protoc-gen-go-grpc插件来生成Go语言的gRPC代码。

goctl env check --install --verbose --force

也可以使用go get命令来安装

go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2

在这里插入图片描述

构建rpc服务:goctl rpc new rpcservice

在这里插入图片描述
go-zero.dev官网修改逻辑层代码,如下图所示:

在这里插入图片描述
详情请移步官网gRPC 演示代码生成

启动rpc服务器:
在这里插入图片描述

编写客户端调用方法,其中必要条件为_grpc.pbpb文件:

在这里插入图片描述
将这两个文件复制到新项目中用于构建客户端。

在这里插入图片描述
创建客户端实例的代码如下:

//配置连连接参数(无加密)
dial, _ := grpc.Dial("localhost:8080", grpc.WithTransportCredentials(insecure.NewCredentials()))
defer dial.Close()
//创建客户端连接
client := rpcservice.NewRpcserviceClient(dial)

所需的库如下:

import (
	"context"
	"fmt"
	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials/insecure"
)

客户端实例调用方法:

res, _ := client.Ping(context.Background(), &rpcservice.Request{
    Ping: "xiaoxu"})

完整代码如下:

package main

import (
	"context"
	"fmt"
	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials/insecure"
	"rpcclient/rpcservice"
)

func main() {
    
	//配置连连接参数(无加密)
	dial, _ := grpc.Dial("localhost:8080", grpc.WithTransportCredentials(insecure.NewCredentials()))
	defer dial.Close()
	//创建客户端连接
	client := rpcservice.NewRpcserviceClient(dial)
	//通过客户端调用方法
	res, _ := client.Ping(context.Background(), &rpcservice.Request{
    Ping: "xiaoxu"})
	fmt.Println(res.Pong)

}

启动客户端如下图所示,成功获取服务端方法返回值。
在这里插入图片描述

更多信息请移步gRPC远程调用服务器与客户端连接详解

所以在go-zero搭建的服务中,任何具有_grpc.pbpb文件的项目都可以通过内部方法构建客户端实例从而远程调用服务器的方法。

这只实现了远程调用,没有任何权限认证。 grpc有自己的权限认证套件,以后会更新。

. . .

相关推荐

额外说明

ORACLE 通配符转义

参考如下小Demo 先建立如下VIEW CREATE OR REPLACE VIEW V AS SELECT 'ABCEDF' As vname FRoM dual UNION ALL SELECT '_BCEFG' AS vname FROM d

额外说明

Java实现简单的Socket通信

先上一个简单的示意图,图中ServerSocket准确的说应该是Server。 Socket翻译成“套接字”比较难以理解,我觉得翻译称为插座比较合适, 两个程序可以通过插座之间通信,插进去就能联系上,至于Socket具体怎么实现的可以不用管,反正就是可以

额外说明

Spring开发中常用注解总结

spring注解汇总 类别 注解 说明 Bean声明 @Component 定义基础层的通用组件,没有明确的角色 @Servcie 定义业务逻辑层的服务组件 @Repository 在数据访问层定义数据资源服务 @Controller 在展现层使用,用于

额外说明

【Golang】实战——go中json.Marshal()和json.Unmarshal()的使用

-一个不甘平凡的普通人,致力于为Golang社区和算法学习做出贡献,期待您的关注和认可,陪您一起学习打卡!!!--- -专栏:算法学习 -专栏:Go实战 -个人主页:个人主页 json.Marshal()和json.Unmarshal()是Go语言中用于

额外说明

移动电商——Flutter-GridView类别导航制作

QQ 1274510382 Wechat JNZ_aming 商业联盟 QQ群538250800 技术搞事 QQ群599020441 解决方案 QQ群152889761 加入我们 QQ群649347320 共享学习 QQ群674240731 纪年科技am

额外说明

机器学习进阶 第一节 第三课

特征预处理 概述 数值型数据标准缩放 归一化 sklearn 归一化 API MinMaxScaler 语法 归一化步骤 归一化案例 概述 特征处理: 通过特定的统计方法 (数学方法)将数据转换成算法要求的数据. sklearn 特征处理 API: sk

额外说明

3-3-1 序列式容器之vector 容器详解

vector 容器是 STL 中最常用的容器之一,它和 array 容器非常类似,都可以看做是对 C++ 普通数组的“升级版”。不同之处在于,array 实现的是静态数组(容量固定的数组),而 vector 实现的是一个动态数组,即可以进行元素的插入和删

额外说明

Tensorflow实现Alexnet对Imagenet的训练与评测

        在上一篇博文中已经提到了如何对Imagenent 2012图像分类大赛的数据进行预处理。在此基础之上,我们可以搭建不同的神经网络来学习如何对Imagenet的数据进行训练和预测。Imagenet的数据集足够庞大,有120多万张图片和100

额外说明

打印从1到最大的n位数

链接: 打印从1到最大的n位数_牛客题霸_牛客网 (nowcoder.com) 描述 输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。 1. 用返回一个整数列表来代替打印 2

额外说明

VB案例:多功能文本处理器

VB案例:多功能文本处理器 一、功能概述 1、删除文本中全部空白行 2、删除文本种全部目标字符 3、删除包含特定字符串(一个或两个)的行 4、删除指定两个字符间的内容 5、实现英汉折行、汉英折行,以及按标点折行 6、查找与替换 7、将文本转换成小写或大写

ads via 小工具