检查etcd服务列表

使用 etcdctl.exe member list 命令查看集群列表:  



如果出现如下的信息,代表可能etcd启动过程阻塞住了,只要在cmd窗口里按下回车键就ok了



或者使用curl访问或网页输入查看http://127.0.0.1:2379/v2/members:



返回以下结果(3个节点): 



在任意节点执行健康检查,查看集群状态:

(注:仅etcdctl 有v2和v3两种api,注意区别),关于v3 api的用法,参见etcdctl的使用[v3版本]:


v2下;




v3下:




etcd的go客户端的简单操作:


zRPC的简单使用

zRPC来自于最近比较火的一个微服务框架go-zero。go-zero是一个集成了各种工程实践的包含了Web和RPC协议的功能完善的微服务框架,zRPC是其中的一个可独立使用的模块。



zRPC底层依赖gRPC,内置了服务注册、负载均衡、拦截器等模块,其中还包括自适应降载,自适应熔断,限流等微服务治理方案,是一个简单易用的可直接用于生产的企业级RPC框架。


zRPC支持直连和基于etcd服务发现两种方式,我们以基于etcd做服务发现为例演示zRPC的基本使用:


配置


创建hello.yaml配置文件,配置如下:



注意文件编码必须为utf-8,格式也要正确。


创建hello.proto文件,并生成对应的go代码。


生成go代码: 





从 Protobuf Releases 下载最先版本的发布包安装即可,可放到go的bin目录内全局使用。


下载protobuf编译器所需插件 


用git下载protoc在go下运行所需插件(执行): go get github.com/golang/protobuf(gopath的bin目录会生成protoc-gen-go.exe)


proto文件标量类型


标量类型如果没有被赋值,则不会被序列化,解析时,会赋予默认值。


  • strings:空字符串


  • bytes:空序列


  • bools:false


  • 数值类型:0


简单示例: 



服务端:

Server端代码:



需要注意的是:


需要更改下go.mod文件中的grpc版本号。默认最新的1.34,启动服务端会报错的,可改为使用v1.29.1


grpc



客户端: 


多个微服务如何使用?如何实现负载均衡和容灾。做个试验,把server.go复制一份,改为server1.go,


把hello.yaml复制一份改为hello1.yaml,改hello1.yaml中的ListenOn,端口变为9091,这时候把server.go和server1.go同时运行起来,看一下:



此时,运行下客户端,发现输出为:



再把server1.go服务停掉,运行下客户端试试输出为:



 综上,使用zRPC挺简单的,并且zRPC内置了服务注册、负载均衡、拦截器等模块。


其中还包括自适应降载,自适应熔断,限流等微服务治理方案,是一个简单易用的可直接用于生产的企业级RPC框架。