基于go-micro+etcd+gin微服务之服务注册与发现(代码片段)

会跳舞的哈密瓜 会跳舞的哈密瓜     2022-12-30     193

关键词:

基于go-micro+etcd+gin微服务之服务注册与发现

etcd主要API

1.Put(key,value)/Delete(key)

$ ./bin/etcdctl put foo "Hello World!"
OK

$ ./bin/etcdctl del key
1

2.Get(key)/Get(keyFrom,keyEnd)

//第一种是指定单个 key 的查询,第二种是指定的一个 key 的范围;
./bin/etcdctl put web1 value1
$ ./bin/etcdctl put web2 value2
$ ./bin/etcdctl put web3 value3
$ ./bin/etcdctl get web --prefix  //根据前缀查询
web1
value1
web2
value2
web3
value3

3.Watch(key/keyPrefix)

//数据订阅,etcd 提供了 Watch 机制,我们可以利用 watch 实时订阅到 etcd 中增量的数据更新,watch 支持指定单个 key,也可以指定一个 key 的前缀,在实际应用场景中的通常会采用第二种形势

// 当 stock1 的数值改变( put 方法)的时候,watch 会收到通知
$ ./bin/etcdctl watch stock1

// 新打开终端etcd
$ ./bin/etcdctl put stock1 1000

//在watch 终端显示
PUT
stock1
1000

//在watch终端中可以看到以stock为前缀的数值改变
$ ./bin/etcdctl watch stock --prefix
$ ./bin/etcdctl put stock1 10
$ ./bin/etcdctl put stock2 20

PUT
stock1
10
PUT
stock2
20

4.Transactions(if/then/else ops).Commit()

//事务操作。etcd 提供了一个简单的事务支持,用户可以通过指定一组条件满足时执行某些动作,当条件不成立的时候执行另一组操作,类似于代码中的 if else 语句,etcd 确保整个操作的原子性

$ ./bin/etcdctl put user1 bad
OK
$ ./bin/etcdctl txn --interactive  

compares:
// 输入以下内容,输入结束按 两次回车
value("user1") = "bad"      

//如果 user1 = bad,则执行 get user1 
success requests (get, put, del):
get user1

//如果 user1 != bad,则执行 put user1 good
failure requests (get, put, del):
put user1 good

// 运行结果,执行 success
SUCCESS

user1
bad

5.Leases:Grant/Revoke/KeepAlive

//设置访问的限制时间
$ ./bin/etcdctl lease grant 300
# lease 326963a02758b527 granted with TTL(300s)

//维持租约
$ ./bin/etcdctl lease keep-alive 326963a02758b520

//撤销租约
$ ./bin/etcdctl lease revoke 326963a02758b527
lease 326963a02758b527 revoked

客户端

//图片验证码
func GetImageCd(ctx *gin.Context) 
  uuid := ctx.Param("uuid")

  //指定consul
  consulService := micro.NewService(
    micro.Registry(etcd.NewRegistry(registry.Addrs("127.0.0.1:2379"))),
  )
  //调用函数 初始化客户端
  microClient := getCaptcha.NewGetCaptchaService("go.micro.service.getCaptcha", consulService.Client())

  resp, err := microClient.Call(context.TODO(), &getCaptcha.RequestUuid: uuid)
  if err != nil 
    fmt.Println("未找到远程服务。。")
    return
  
  //将得到的数据反序列化
  var img captcha.Image
  json.Unmarshal(resp.Img, &img)

  png.Encode(ctx.Writer, img)
  // fmt.Println(str)
  fmt.Println("uuid = ", uuid)

服务端

weifuwu/service/getCaptcha/proto/getCaptcha/getCaptcha.proto

//在终端输入 make proto生成proto文件
syntax = "proto3";

package go.micro.service.register;

option go_package = "/proto/register";

service Register 
  rpc Register(Request) returns (Response) ;


message Request 
  string mobile = 1;
  string password = 2;
  string sms_code = 3;


message Response 
  string errno = 1;
  string errmsg = 2;

weifuwu/service/getCaptcha/handler/getCaptcha.go

type GetCaptcha struct

// Call is a single request handler called via client.Call or the generated client code
func (e *GetCaptcha) Call(ctx context.Context, req *getCaptcha.Request, rsp *getCaptcha.Response) error 
	//log.Info("Received GetCaptcha.Call request")
	//rsp.Msg = "Hello " + req.Name

  //初始化对象
  cap := captcha.New()
  //设置字体
  cap.SetFont("./conf/comic.ttf")
  //设置干扰强度
  cap.SetDisturbance(captcha.MEDIUM)
  // 设置前景色
  cap.SetFrontColor(color.RGBA0,0,0, 255)
  // 设置背景色
  cap.SetBkgColor(color.RGBA100,0,255, 255, color.RGBA255,0,127, 255, color.RGBA255,255,10, 255)
  //生成字体
  img, str := cap.Create(4,captcha.NUM)

  //存储图片验证码到redis
  err := model.SaveImgCode(str,req.Uuid)
  if err != nil 
    return err
  

  //将生成的图片序列化
  imgBuf, _ := json.Marshal(img)

  //将imgBuf使用参数rsp穿出
  rsp.Img = imgBuf
	return nil


weifuwu/service/getCaptcha/model/modelFunc.go

//存储uuid和图片验证码到redis数据库
func SaveImgCode(code,uuid string) error 
  conn, err := redis.Dial("tcp","127.0.0.1:6379")
  if err != nil 
    fmt.Println("redis dial err:",err)
    return err
  
  defer conn.Close()
  //写数据 有效时间5分钟
  _, err = conn.Do("setex",uuid,60*5,code)
  return err


go-micro微服务框架实践-api(十三)

...问,并且路由是基于服务发现机制向下转发的。MicroAPI在go-micro之上开发,所以它集成了服务发现、负载均衡、编码及基于RPC的通信。因为microapi内部使用了go-micro,所以它自身也是可插拔的。参考go-plugins了解对gRPC、kubernetes、etcd... 查看详情

go微服务实战之如何使用go-micro写微服务应用

什么是微服务?什么是微服务(microservice)?这是企业界正在向计算界提出的问题。一个产品的可持续性取决于它的可修改程度。大型产品如果不能正常维护,就需要在某个时间点停机维护。而微服务架构用细化的服务取代了传... 查看详情

go-micro的etcd服务注册管理界面使用方法

...务及健康状况。etcd并未提供此功能,但是我们可以使用go-micro提供的一个简易界面查看我们注册到etcd中的服务本文是基于【docker+etcd+go-microapi网关的搭建及使用】:https://www.jianshu.com/p/13d1df6e6731,这篇文章的环境基础来实现的,... 查看详情

.netcore微服务之:基于consul实现服务治理

参考技术A本篇文章为.NETCore实现企业级微服务架构技术点介绍Consul是一个分布式,高可用、支持多数据中心的服务注册、发现、健康检查和配置共享的服务软件。由HashiCorp公司用Go语言开发推出的开源产品用于实现分布式系统的... 查看详情

go-micro微服务框架实践-proxy(十五)

...的请求转向那些没有直接暴露给客户端的服务。代理基于go-micro开发,也就是说它是依赖服务发现的。安装ConsulMicro代理默认是运行在8081端口下。启动代理:服务默认使用ACME安全协议可以选择性配置主机白名单命令行如果要指定... 查看详情

go微服务框架go-micro深度学习-目录

go微服务框架go-micro深度学习(一)整体架构介绍go微服务框架go-micro深度学习(二)入门例子go微服务框架go-micro深度学习(三)Registry服务的注册和发现go微服务框架go-micro深度学习(四)rpc方法调用过程详解go微服务框架go-micro深度学习(五)s... 查看详情

31.总结(代码片段)

...应该使用ctx.Abort()方法,才会中断业务代码运行2.gin结合go-micro的具体步骤是服务端:创建proto文件,生成对应的pb文件,根据proto编写的规则编写service的具体实现逻辑,启动micro服务并注册到etcd或者consul中,使用microapi添加网关,或... 查看详情

4.微服务-go-micro(代码片段)

1.介绍1.1go-micro简介?GoMicro是一个插件化的基础框架,基于此可以构建微服务,Micro的设计哲学是可插拔的插件化架构?在架构之外,它默认实现了consul作为服务发现(2019年源码修改了默认使用mdns),通过http进行通信,通过protobuf... 查看详情

go微服务实战之如何实现加解密操作的微服务开发

1前言在上一篇文章——《​​Go微服务实战之如何使用go-micro写微服务应用​​》中,我们介绍了微服务的相关概念和go-micro框架的特点。接下来,我们将以循序渐进的方式建立一个简易的提供加解密服务的Go微服务项目。首先为... 查看详情

微服务学习--micro和go-micro

一、区别  A、go-micro:微服务开发库  B、Micro:基于Go-micro开发的运行时工具集二、Micro工具集组件  A、API:将http请求转向内部应用    1、API:将http请求映射到API接口    2、RPC:将http请求映射到RPC服务   ... 查看详情

(17)go-micro微服务prometheus监控(代码片段)

目录一Prometheus监控介绍1.微服务监控系统promethues介绍2.微服务监控系统promethues工作流程二Prometheus监控重要组件和重要概念1.微服务监控系统promethues重要组件2.微服务监控系统promethues重要概念三微服务监控系统grafana看板四Prometheu... 查看详情

go微服务框架go-micro深度学习registry服务的注册和发现(代码片段)

...少的功能,这样系统才能有更高的性能,更高的可用性。go-micro框架的服务发现有自己能用的接口Registry。只要实现这个接口就可以定制自己的服务注册和发现。  go-micro在客户端做的负载,典型的Balancing-awareClient模式。&nb... 查看详情

(14)go-micro微服务服务层handle开发(代码片段)

目录一Handle层开发功能说明需要完成的服务开发功能:从哪找需要开发的功能二代码编写三最后一Handle层开发功能说明需要完成的服务开发功能:登录注册查询用户信息修改信息发送注册邮件发送重置密码邮件重置密码获取权限... 查看详情

浅谈etcd+grpc服务注册与发现(代码片段)

...浅谈云原生技术组件—etcd》,在其中我主要说明了etcd在基于Kubernetes云原生微服务框架中的定位,主要是用来做服务的远程配置、KV存储等等,那么今天就来简要的补充讲解下etcd的另一个重要的作用——服务注册和发现,没错,... 查看详情

go微服务学习go-micro框架(代码片段)

...绍micro和consul,具体使用放在下一节1micro简介在了解go-micro之前,我们先来了解一下什么是micro。Micro解决了在云内外构建分布式系统的关键要求。它利用微服务体系结构模式,并提供一组作为平台构建基块的服务.Micro... 查看详情

go微服务学习go-micro框架(代码片段)

由于Micro3.0直接放弃维护go-micro,所以网上很多文章都是已经过时的了。那些安装方法根本装不上了。此贴主要根据官方文档进行摸索,感觉官方文档似乎也没来得及更新,所以部分操作也没能成功。就只记录一下自... 查看详情

go-micro微服务框架

背景  已经学习了微服务之间通信采用的通信协议,如何实现服务的注册和发现,搭建服务管理集群,以及服务与服务之间的RPC通信方式。具体的内容包括:protobuf协议,consul及docker部署consul集群,gRPC框架的使用等具体的实现... 查看详情

(10)go-micro微服务发送邮件(代码片段)

目录一获取QQ邮箱Pass二安装gomail三初始化发送邮件四发送注册邮件五发送重置密码邮件六最后一获取QQ邮箱Pass1.登录QQ邮箱2.点击设置,点击账户,下拉找到POP3/SMTP,点击生成授权码3.这样就获取了授权码,要妥善保管。二安装goma... 查看详情