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

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

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

收录于:23天前

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)
}
. . .

相关推荐

额外说明

Mybatis一级缓存和二级缓存的区别

区别 1.一级缓存 Mybatis的一级缓存是指SQLSession,一级缓存的作用域是SQlSession, Mabits默认开启一级缓存。 在同一个SqlSession中,执行相同的SQL查询时;第一次会去查询数据库,并写在缓存中,第二次会直接从缓存

额外说明

JPA 枚举形式做为字段存数据库varcher

    数据库字段,risk_type 。 string类型   @Enumerated(EnumType.STRING) @Column(nullable = false) private RiskType riskType;  

额外说明

Java中的BigDecimal工具类(支持空值运算版本)

前言 需要计算的场景绕不过去会使用BigDecimal类,可频繁的判空让代码可读性下降也使代码冗余度增高,不判空又容易报空指针异常,而且有些场景下的计算,结果为空时需要返回null,所以也不可以将将BigDecimal类型的值都初始化为0,会让运算结果产

额外说明

Python爬虫之Scrapy框架系列(17)——实战某代码托管平台登录【FormRequest类】

目录: 1. 分析: 2. 分析上述变化的参数如何得到: 3. scrapy项目编写: 3.1 创建项目及爬虫文件: ①编写爬虫文件: ②效果—登陆成功: Pycharm骚操作拓展: 1. 分析: 对比分析Form Data里的参数: commit: S

额外说明

【Java 基础篇】Java日期和时间格式化与解析指南:SimpleDateFormat详解

日期和时间在软件开发中经常被用到,无论是用于记录事件、计算时间间隔还是格式化日期以供用户友好的展示。Java 提供了强大的日期和时间处理工具,其中 SimpleDateFormat 类是一个重要的工具,用于格式化日期和时间,同时也支持解析日期和时间。本篇

额外说明

Linux命令200例:head用于显示文件的开头部分(常用)

-作者简介,黑夜开发者,全栈领域新星创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。 -数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 -本文已收录于专栏:Linux命令大全。 -本专栏我们会通过具体的

额外说明

[设计模式-结构型]享元模式(Flyweight )

概括 名称 Flyweight 结构 动机 运用共享技术有效地支持大量细粒度的对象。 适用性 一个应用程序使用了大量的对象。 完全由于使用大量的对象,造成很大的存储开销。 对象的大多数状态都可变为外部状态。 如果删除对象的外部状态,那么可以用相对较少的共

额外说明

WordXML格式解析

<w:wordDocument xmlns:w=“http://schemas.microsoft.com/office/word/2003/wordml” xmlns:wx=“http://schemas.microsoft.com/office/wo

额外说明

Vue 中 安装 stylus

先说一下三个重要的地址: git:https://github.com/stylus/stylus stylus npm:https://www.npmjs.com/package/stylus  stylus loader npm:stylus-loa

额外说明

解决系统缺少ncryptprov.dll文件导致程序无法运行问题

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个ncryptprov.dll

ads via 小工具