go-micro使用etcd作为注册中心
这一篇就来讲讲,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作为注册中心相关推荐
- SpingCloud资讯-断路器、注册中心、网关
Spring Cloud Alibaba 关注的程序员DD博客一直在持续推荐SpringCloudAlibaba相关资讯,需要的可以去围观 spring-cloud-alibaba-nacos 阿里巴 ...
- 注册中心对比Zookeeper、Eureka、Nacos、Consul和Etcd
一.注册中心概念 1.1 什么是注册中心 注册中心主要有三种角色: 服务提供者(RPC Server):在启动时,向 Registry 注册自身服务,并向 Registry 定期发送心跳汇报存活状态. ...
- 【Dubbo】扩展 etcd 注册中心
主要内容 : etcd 数据结构设计 : 构建可运行的注册中心 : 搭建 etcd 集群并在 Dubbo 中运行 . 着重从扩展 Dubbo 新注册中心方面入手 , 重点说明深入开发 Dubbo 注册 ...
- 微服务架构:注册中心 ZooKeeper、Eureka、Consul 、Nacos 对比!
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 前言 服务注册中心本质上是为了解耦服务提供者和服务消费者. ...
- Spring Cloud Alibaba教程:使用Nacos作为服务注册中心
点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 什么是Nacos? Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易 ...
- 阿里面试败北:5种微服务注册中心如何选型?这几个维度告诉你!
1.前言 微服务的注册中心目前主流的有以下五种: Zookeeper Eureka Consul Nacos Kubernetes 那么实际开发中到底如何选择呢?这是一个值得深入研究的事情,别着急,今 ...
- 注册中心ZooKeeper、Eureka、Consul 、Nacos
前言 服务注册中心本质上是为了解耦服务提供者和服务消费者.对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的.更进一步,为了支持弹性扩缩容特性,一个微服务的提供者的数 ...
- 突发热点事件下微博高可用注册中心vintage的设计\u0026实践
当前微博服务化采用公有云+私有云的混合云部署方式,承载了每天百亿级的流量,vintage 作为微博微服务的注册中心,为管理 10w 级微服务节点以及在流量激增的情况下的服务快速扩缩容,面临了极大挑战. ...
- 容器注册到consul_Spring Cloud 系列之 Consul 注册中心(一)
Netflix Eureka 2.X https://github.com/Netflix/eureka/wiki 官方宣告停止开发,但其实对国内的用户影响甚小,一方面国内大都使用的是 Eureka ...
最新文章
- 使用Linux服务器搭建个人深度学习环境
- 浅谈WebSocket
- DG环境数据库RMAN备份策略制定
- 团队愿景和团队章程的问答?
- 算法: 把字字符串转化为整数;
- css垂直居中技巧总结
- 进阶攻略|前端最全的框架总结
- MySQL常用数据类型
- Hibernate自动事务揪出的编码不规范
- JavaSE复习(二)集合
- RHEL4下刻录机使用--终端图形化方式
- Android getevent,sendevent,input keyevent
- 格雷码的生成详解(C++)(附格雷码对照表)
- 软件设计师历年真题及答案2009-2017
- 电力电子技术(15)——晶闸管直流电动机调速相控电路的驱动控制
- 中国大学Mooc平台,自动下载pdf文档
- 表贴电阻尺寸与什么有关_贴片电阻、贴片电容规格、封装、尺寸、功率(转)
- 大盘点 | 2020年「21篇」医学影像算法最佳综述
- 又涨了!2021 年 5 月程序员工资统计新鲜出炉,网友:还是Java程序员牛逼~
- 英语和数学不好,能学编程吗?
热门文章
- SpringBoot异常处理回滚事务详解(自动回滚、手动回滚、部分回滚)
- Android系统Crash/ANR类型弹框
- (1分钟突击面试) 高斯牛顿、LM、Dogleg后端优化算法
- AVL-Cruise纯电动汽车仿真建模教程-能量回收策略的实现
- uni-app入门介绍
- netty 简单demo
- [大学物理实验-1]弹簧谐振子实验
- CF(Div. 1 + Div. 2) E. Carrots for Rabbits(优先队列+贪心)
- 985毕业,半路出家28岁进军Java,坚持三年如今年薪36W+,我是这么做的...
- 【python--爬虫】b站弹幕爬虫