这一篇就来讲讲,go-micro v2 如何进行配置etcd注册中心和操作配置中心

前言

go-micro框架为服务注册发现提供了标准的接口Registry。只要实现这个接口就可以定制自己的服务注册和发现。不过官方已经为主流注册中心提供了官方的接口实现,大多数时候我们不需要从头写起。

官方默认实现了mdns,consul,etcd等注册中心接口,提供了开箱即用的方法。

v2以前:默认使用consul作为注册中心。

最新版本:默认使用mDNS 提供零配置的发现系统,大多数系统已经内置,程序不需要任何改动就具备服务注册和发现能力。

实际生产中,官方则推荐使用etcd组成更具弹性的集群方案。

简介

etcd作为服务发现系统,有以下的特点:

  • 简单:安装配置简单,而且提供了HTTP API进行交互,使用也很简单
  • 安全:支持SSL证书验证
  • 快速:根据官方提供的benchmark数据,单实例支持每秒2k+读操作
  • 可靠:采用raft算法,实现分布式系统数据的可用性和一致性

etcd项目地址:https://github.com/coreos/etcd/

启动服务

docker run --name etcd -d -p 2379:2379 -p 2380:2380 -e ALLOW_NONE_AUTHENTICATION=yes bitnami/etcd:3.3.11 etcd
docker exec -it etcd /bin/bash

服务配置

代码配置

在标准接口下,server和client端诶之方式没有任何区别,这边会分开展示

服务注册

...
// New Serviceservice := micro.NewService(// 服务名称micro.Name("go.micro.service.demo"),// 服务版本micro.Version("latest"),micro.Registry(etcd.NewRegistry(registry.Addrs("127.0.0.1:2379"),)), //etcd注册)
...

这里使用go-micro已经实现的etcd包配置etcd的地址即可

import ("github.com/micro/go-micro/v2/registry""github.com/micro/go-micro/v2/registry/etcd"
)

我们也可以查看源码etcd.NewRegistry支持的配置项

type Options struct {// 地址列表Addrs     []string// 超时时间Timeout   time.Duration// 与注册中心的安全通信Secure    bool// tls加密通信配置TLSConfig *tls.Config// Other options for implementations of the interface// can be stored in a contextContext context.Context
}

然后正常启动程序,在日志中会发现已经注册到etcd

2022-07-19 10:14:10  file=v2@v2.9.2-0.20201226154210-35d72660c801/service.go:192 level=info Starting [service] go.micro.service.demo
2022-07-19 10:14:10  file=grpc/grpc.go:864 level=info Server [grpc] Listening on [::]:61922
2022-07-19 10:14:10  file=grpc/grpc.go:697 level=info Registry [etcd] Registering node: go.micro.service.demo-d39516cd-a8a2-438f-bb90-fe897bf9ed7c

这里看到服务已经正常移动,并注册到etcd中

61922:这是服务的端口,使用etcd作为注册中心,服务间相互调用是通过服务名称的,服务本身的端口号不需要我们自己维护,client通过注册中心的服务名就能call服务的rpc接口,但是如果你使用grpc的官方方法来call服务的接口,必须要要自己指定端口启动,使用micro.Address来指定端口号

go.micro.service.demo-d39516cd-a8a2-438f-bb90-fe897bf9ed7c:注册中心中的key

服务发现

服务发现和服务注册配置是一致的,当你仅需要client去调用go-micro的微服务,而client不提供给外部的rpc接口时,你可以这样配置

...
service := micro.NewService(micro.Name("go.micro.client"),// 配置etcd为注册中心,配置etcd路径,默认端口是2379micro.Registry(etcd.NewRegistry(// 地址是我本地etcd服务器地址,不要照抄registry.Addrs("172.18.0.58:2379"),)),
)
service.Init()
...

这里完全不用调用service.Run(),因为你仅需要去注册中心call微服务的rpc方法,并不提供接口给其他服务调用

命令行参数

go-micro除了可以在代码中指定配置注册中心,还支持命令行获取注册中心配置

在启动命令中增加如下参数:

  • --registry=etcd
  • --registry_address=172.18.0.58:2379

  • MICRO_REGISTRY_ADDRESS=172.18.0.58:2379
  • MICRO_REGISTRY=etcd

使用上面方法也可达到相同的效果,但是生产过程中使用的很少,虽然他很灵活,但是依赖系统的环境配置,给部署增加了工作量

总结

我们可以用很少的代码,甚至不需要改动现有的服务,将注册中心切换到etcd来,这基于统一的接口设计方式值得我们学习使用。

好了,以上就是本文的主要内容。

老规矩,代码已经上传到Github,欢迎访问: [https://github.com/casiphia/go-micro-examples](

go-micro使用etcd作为注册中心相关推荐

  1. SpingCloud资讯-断路器、注册中心、网关

    Spring Cloud Alibaba 关注的程序员DD博客一直在持续推荐SpringCloudAlibaba相关资讯,需要的可以去围观 spring-cloud-alibaba-nacos 阿里巴 ...

  2. 注册中心对比Zookeeper、Eureka、Nacos、Consul和Etcd

    一.注册中心概念 1.1 什么是注册中心 注册中心主要有三种角色: 服务提供者(RPC Server):在启动时,向 Registry 注册自身服务,并向 Registry 定期发送心跳汇报存活状态. ...

  3. 【Dubbo】扩展 etcd 注册中心

    主要内容 : etcd 数据结构设计 : 构建可运行的注册中心 : 搭建 etcd 集群并在 Dubbo 中运行 . 着重从扩展 Dubbo 新注册中心方面入手 , 重点说明深入开发 Dubbo 注册 ...

  4. 微服务架构:注册中心 ZooKeeper、Eureka、Consul 、Nacos 对比!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 前言 服务注册中心本质上是为了解耦服务提供者和服务消费者. ...

  5. Spring Cloud Alibaba教程:使用Nacos作为服务注册中心

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 什么是Nacos? Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易 ...

  6. 阿里面试败北:5种微服务注册中心如何选型?这几个维度告诉你!

    1.前言 微服务的注册中心目前主流的有以下五种: Zookeeper Eureka Consul Nacos Kubernetes 那么实际开发中到底如何选择呢?这是一个值得深入研究的事情,别着急,今 ...

  7. 注册中心ZooKeeper、Eureka、Consul 、Nacos

    前言 服务注册中心本质上是为了解耦服务提供者和服务消费者.对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的.更进一步,为了支持弹性扩缩容特性,一个微服务的提供者的数 ...

  8. 突发热点事件下微博高可用注册中心vintage的设计\u0026实践

    当前微博服务化采用公有云+私有云的混合云部署方式,承载了每天百亿级的流量,vintage 作为微博微服务的注册中心,为管理 10w 级微服务节点以及在流量激增的情况下的服务快速扩缩容,面临了极大挑战. ...

  9. 容器注册到consul_Spring Cloud 系列之 Consul 注册中心(一)

    Netflix Eureka 2.X https://github.com/Netflix/eureka/wiki 官方宣告停止开发,但其实对国内的用户影响甚小,一方面国内大都使用的是 Eureka ...

最新文章

  1. 使用Linux服务器搭建个人深度学习环境
  2. 浅谈WebSocket
  3. DG环境数据库RMAN备份策略制定
  4. 团队愿景和团队章程的问答?
  5. 算法: 把字字符串转化为整数;
  6. css垂直居中技巧总结
  7. 进阶攻略|前端最全的框架总结
  8. MySQL常用数据类型
  9. Hibernate自动事务揪出的编码不规范
  10. JavaSE复习(二)集合
  11. RHEL4下刻录机使用--终端图形化方式
  12. Android getevent,sendevent,input keyevent
  13. 格雷码的生成详解(C++)(附格雷码对照表)
  14. 软件设计师历年真题及答案2009-2017
  15. 电力电子技术(15)——晶闸管直流电动机调速相控电路的驱动控制
  16. 中国大学Mooc平台,自动下载pdf文档
  17. 表贴电阻尺寸与什么有关_贴片电阻、贴片电容规格、封装、尺寸、功率(转)
  18. 大盘点 | 2020年「21篇」医学影像算法最佳综述
  19. 又涨了!2021 年 5 月程序员工资统计新鲜出炉,网友:还是Java程序员牛逼~
  20. 英语和数学不好,能学编程吗?

热门文章

  1. SpringBoot异常处理回滚事务详解(自动回滚、手动回滚、部分回滚)
  2. Android系统Crash/ANR类型弹框
  3. (1分钟突击面试) 高斯牛顿、LM、Dogleg后端优化算法
  4. AVL-Cruise纯电动汽车仿真建模教程-能量回收策略的实现
  5. uni-app入门介绍
  6. netty 简单demo
  7. [大学物理实验-1]弹簧谐振子实验
  8. CF(Div. 1 + Div. 2) E. Carrots for Rabbits(优先队列+贪心)
  9. 985毕业,半路出家28岁进军Java,坚持三年如今年薪36W+,我是这么做的...
  10. 【python--爬虫】b站弹幕爬虫