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

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

# go-zero,golang,etcd,qt 额外说明

收录于:157天前

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:2379
  Key: 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的配置进行注解,通过生成的文件写入客户端。 pb的客户端生成文件也是用go-zero重写的,开发者直接基于这个方法实例化。客户。如下

在这里插入图片描述

方法的生成所在目录可能不一样,包含定义的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)
}
. . .

相关推荐

额外说明

xxl-job2.3.1 好处 使用(分片处理数据)

业务场景 在平时的业务场景中,经常有一些场景需要使用定时任务,比如: 时间驱动的场景:某个时间点发送优惠券,发送短信等等。 批量处理数据:批量统计上个月的账单,统计上个月销售数据等等。 固定频率的场景:每隔5分钟需要执行一次。 所以定时任务在平时开发中并

额外说明

leetcode547(省份数量:并集搜索)

有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。 省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。 给你一个 n x n 的矩阵 i

额外说明

Direct3D 12——几何着色器——几何着色器概念

几何着色器 几何着色器这个可选阶段便位于顶点着色器与像素着色器之间。几何着色器所输出的图元由顶点列表定义而成。在退岀几何着色器时,必将顶点的位置变换到齐次 裁剪空间。换言之,经过几何着色器阶段的处理后,我们就得到了位于齐次裁剪空间中由一系列顶点所 定义的

额外说明

terminator安装、美化、使用及闪退解决

一、安装 添加仓库/软件源 # 如显示禁用该源,尝试直接第3步进行安装。 sudo add-apt-repository ppa:gnome-terminator 更新源 sudo apt update 安装 terminator sudo apt

额外说明

机器人学一些概念2——四元数,D-H 参数

文章目录 机器人学一些概念2 四元数 D-H 参数 机器人学一些概念2 四元数 ​ 这里是机器人旋转中用到的四元数,总结来看主要是用于运算方便,避免 θ \theta θ接近0的时候造成旋转矩阵无法求解。 ​ 我们将旋转的参数(转轴 W W W,转角 θ

额外说明

Docker介绍及应用

一、Docker Docker是基于Go语言实现的云开源项目,诞生于2013年初,最初发起者是dotClouw公司。Docker 自开源后受到广泛的关注和讨论,目前已有多个相关项目,逐断形成了围Docker的生态体系。dotCloud 公司后来也改名为D

额外说明

GCP设置Proxy来连接Cloud SQL

在之前的文章用Google CDC来同步Cloud SQL的数据到Bigquery_gzroy的博客-CSDN博客中,我通过在一个VM上设置反向代理的方式,使得Datastream可以通过私用连接连到Cloud SQL数据库进行数据复制。但是这种方式不太

额外说明

数据结构与算法(二):线性表

一、基本概念 二、顺序表 三、链表 1、单向链表 2、单向循环链表 3、双向链表 4、静态链表 上一篇《数据结构与算法(一):概述》中介绍了数据结构的一些基本概念,并分别举例说明了算法的时间复杂度和空间复杂度的求解方法。这一篇主要介绍线性表。 一、基本概

额外说明

[JS进阶] JS 之Blob 对象类型

什么是Blob? Blob 是什么? 这里说的是一种Javascript的对象类型。 oracle 中也有类似的栏位类型。 在 [JS进阶] HTML5 之文件操作(file) 这一篇中用到了File对象,而实际上 file 对象只是 blob 对象的一

额外说明

判断javascript 变量存不存在

<head runat="server">     <title>Untitled Page</title>     <script type ="text/javascript" >     function aa(id,name)     {    

ads via 小工具