go-zero直连与etcd服务注册中心

go-zero中直连方式

在使用grpc是最重要的就是pb文件了,生成的pb文件,通过pb文件可以生成grpc的客户端和服务端,那么客户端和服务端就可以直连了,再次基础上可以引入etcd实现服务注册。

所有的代码都需要开发者编写,包括配置etcd,在grpc的服务端注册到etcd中并发送心跳,客户端通过etcd获取服务端地址访问rpc服务器。(具体实现方式参考:gRPC远程调用服务端与客户端连接详解)

etcd服务注册与发现将客户端地址注册到etcd服务器。

但是在go-zero框架已经集成了grpc并对功能进行了扩展库名为zrpc,该库会读取yaml的配置,config,svc目录的配置实现包括grpc的直连或者etcd的连接,开发者在使用zrpc后只需要在yaml配置即可。

go-zero的gpctl工具生成的代码一般都包括:
yaml文件

Name: demorpc.rpc
ListenOn: 0.0.0.0:8080
Etcd:Hosts:- 192.168.24.128:2379Key: demorpc.rpc

config配置文件

type Config struct {zrpc.RpcServerConf
}

svc目录

type ServiceContext struct {Config config.Config
}func NewServiceContext(c config.Config) *ServiceContext {return &ServiceContext{Config: c,}
}

zrpc将所有的配置都移动到了yml中,并通过config,svc的双层调用便于集成第三方工具。

goctl生成rpc的原始配置就是启动一个rpc服务名称和ip及端口。

在这里插入图片描述

通过配置文件启动代码,会启动指定端口和ip上启动一个rpc服务端。

goctl工具生成时还帮助生成了客户端代码,不需要开发者通过原始的pb文件编写客户端。(如何分项目的话需要将pb和客户端代码一起移动)并将zrpc融入到代码中使得也可以通过yaml来配置客户端。
在这里插入图片描述

zrpc直接实现了客户端代码,不需要开发编写,另外生成代码默认是注册到etcd中,如果采用直连的方式注释调Etcd的配置即可。

在此次案例中使用直连的方式,注释调Etcd的配置,通过生成文件编写客户端,在go-zero中也对pb的客户端生成文件进行了重写,开发者基于此方法直接实例化客户端。如下

在这里插入图片描述

方法的生成所在目录可能不一样,包含定义的epc方法和返回XXXclient就是。

利用方法的NewXXX创建客户端,如下

func main() {ip := []string{"127.0.0.1:8080"}clientconf := zrpc.RpcClientConf{Endpoints: ip}client := zrpc.MustNewClient(clientconf)param := demorpc.Request{Ping: "11",}ping, err := demorpcclient.NewDemorpc(client).Ping(context.Background(), &param)if err != nil {}fmt.Println(ping)
}

NewXXX的方法参数是zrpc.Client类型,zrpc.MustNewClient方法返回该类型,其参数又是zrpc.RpcClientConf配置类型,如下

在这里插入图片描述
其中Etcd是注册中心配置,Endpoints是服务集群配置,可配置多个rpc服务端,Target是单个rpc直连配置。如下为客户端代码:

import ("context""etcd/demorpc/demorpc""etcd/demorpc/demorpcclient""fmt""github.com/zeromicro/go-zero/zrpc"
)func main() {ip := []string{"127.0.0.1:8080"}//clientconf := zrpc.RpcClientConf{Endpoints: ip}clientconf := zrpc.RpcClientConf{Target: ip[0]}client := zrpc.MustNewClient(clientconf)param := demorpc.Request{Ping: "11",}ping, err := demorpcclient.NewDemorpc(client).Ping(context.Background(), &param)if err != nil {}fmt.Println(ping)
}

服务端方法如下
在这里插入图片描述

在客户端配置了服务端的ip与端口,实现了的直连的方式。分别启动服务端月客户端。

在这里插入图片描述

在这里插入图片描述

etcd服务注册于发现

了解了直连方式,etcd注册中心就更简单了。

在直接连接中,注释掉etcd配置,
在这里插入图片描述
zrpc.RpcClientConf配置使用Target或者Endpoints即可。

在etcd注册中心中,配置etcd,使用Etcd即可,如下

在这里插入图片描述

下载并启动etcd服务器,配置服务器ip及端口
在这里插入图片描述
在这里插入图片描述

启动服务器

在这里插入图片描述

在启动服务器时一直报该错误,原因时etcd服务器启动方式错误,缺少配置参数导致远程连接不上。

如果直接使用etcd命令启动就会报如下标题的错误。

No connection could be made because the target machine actively refused it

panic: context deadline exceeded

正确的启动etcd的命令是:

etcd --listen-client-urls 'http://0.0.0.0:2379' --advertise-client-urls 'http://0.0.0.0:2379'

在这里插入图片描述

# stop
systemctl  stop etcd# status
systemctl status etcd

使用上述命令启动后就不会报错了。

在etcd服务器使用命令查看所有key:

export ETCDCTL_API=3
etcdctl get --prefix ""

在这里插入图片描述
在客户端使用Etcd配置参数,携带Key即可

import ("context""etcd/demorpc/demorpc""etcd/demorpc/demorpcclient""fmt""github.com/zeromicro/go-zero/core/discov""github.com/zeromicro/go-zero/zrpc"
)func main() {ip := []string{"127.0.0.1:8080"}//clientconf := zrpc.RpcClientConf{Endpoints: ip}//clientconf := zrpc.RpcClientConf{Target: ip[0]}clientconf := zrpc.RpcClientConf{Etcd: discov.EtcdConf{Hosts: ip,Key:   "demorpc.rpc",}}client := zrpc.MustNewClient(clientconf)param := demorpc.Request{Ping: "11",}ping, err := demorpcclient.NewDemorpc(client).Ping(context.Background(), &param)if err != nil {}fmt.Println(ping)
}

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

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

相关文章

7 个适合初学者的项目,可帮助您开始使用 ChatGPT

推荐:使用 NSDT场景编辑器快速搭建3D应用场景 从自动化日常任务到预测复杂模式,人工智能正在重塑行业并重新定义可能性。 当我们站在这场人工智能革命中时,我们必须了解它的潜力并将其整合到我们的日常工作流程中。 然而。。。我知道开始使…

企业架构LNMP学习笔记21

URL重写: ngx_http_rewrite_module 模块用于使用PCRE正则表达式更改请求URI,返回重定向,以及有条件地选择配置。 return 该指令用于结束结束规则的执行并返回状态码给客户端。 403 Forbidden.服务器已经理解请求,但是拒绝执行它 404 Not…

音频——I2S DSP 模式(五)

I2S 基本概念飞利浦(I2S)标准模式左(MSB)对齐标准模式右(LSB)对齐标准模式DSP 模式TDM 模式 文章目录 DSP formatDSP A时序图逻辑分析仪抓包 DSP B时序图逻辑分析仪抓包 DSP format DSP/PCMmode 分为 Mode-A 和 Mode-B 共 2 种模式。不同芯⽚有的称为 PCM mode 有的称为 DSP m…

ms17-010(永恒之蓝)漏洞复现

目录 前言 一、了解渗透测试流程 二、使用nmap工具对win7进行扫描 2.1 2.2 2.3 2.4 2.5 三、尝试ms17-010漏洞利用 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 四、结果展示 4.1 4.2 4.3 4.4 4.5 总结 前言 ms17-010(永恒之蓝&am…

说说分布式系统容器化

继上一篇浅谈高并发分布式架构演进路径,单体服务完成分布式架构改造,转型为微服务。随着微服务数量的急剧增加,跨应用、跨系统的调用越来越多,调用关系和依赖关系日益复杂,这种复杂性增加了系统的设计、实施和维护的难…

【精品】NLP自然语言处理学习路线(知识体系)

当前,大规模预训练语言模型的强大对话问答、文本生成能力,将自然语言处理(NLP)的研究和应用推向了新一轮的热潮。NLP是计算机科学、人工智能和语言学等学科交叉的前沿领域。NLP的应用和研究范围非常的广泛,个人是没有找…

群晖NAS教程(二十四)、利用ContainerManager安装jellyfin

群晖NAS教程(二十四)、利用ContainerManager安装jellyfin 一、下载nyamisaka/jellyfin镜像 二、运行jellyfin容器并配置 容器名称可以随便填写 这里映射端口设置为8096,并且映射了两个配置文件夹和一个电影的目录。 点击完成。 这里看到已经运行起来了。 三、jelly…

Vue项目案例-头条新闻

目录 1.项目介绍 1.1项目功能 1.2数据接口 1.3设计思路 2.创建项目并安装依赖 2.1创建步骤 2.2工程目录结构 2.3配置文件代码 3.App主组件开发 3.1设计思路 3.2对应代码 4.共通组件开发 4.1设计思路 4.2对应代码 5.头条新闻组件开发 5.1设计思路 5.2对应代码 …

降低LLM的幻觉风险:实用策略与技术

一、前言 近年来,大语言模型的快速发展为构建更智能和更人性化的AI系统提供了很多可能性。像GPT-3.5、GPT-4、Bard、Claude 2和LLaMa 2等大语言模型 (LLM) 在个人助理或聊天机器人应用领域展示了强大的潜力,可以生成流畅而令人惊叹的响应来回答用户的问…

【无源谐波滤波器通常用于电力系统中的谐波抑制】用于抑制电力系统谐波的无源谐波滤波器(Simulink实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

九号滑板车F2 Pro采用全新折叠设计,为用户带来便捷使用体验

拥挤的城市中,滑板车可以作为一种快速、便捷的交通工具,帮助你避开交通堵塞。而且滑板车轻便,容易携带,你可以将它放在车上、公共汽车上、火车上,甚至在办公室或学校里使用。今天就带大家了解一款适合城市通勤骑行的车…

UniTask保姆级教程

目录 一、UniTask的简介和安装 https://github.com/Cysharp/UniTask.gitpathsrc/UniTask/Assets/Plugins/UniTask 空载性能测试 二、基础用法详解 三、基础用法扩展 四、进阶 五、VContainer简介 六、VContainer基础实例 方便快速查找 一、UniTask的简介和安装 项目地…