服务发现,就是通过什么办法可以找到需要调用的服务的地址(ip和端口),因为只有拿到服务的地址,我们才可以连接服务,发送接口调用请求。

上一个章节,我们没说明两个服务直接是如何找到对方的,只是使用服务名,就可以调用远程服务api,本章将介绍Go Micro如何通过服务名找到服务的地址。

Go Micro的Register模块负责服务发现,Go Micro 框架以插件的形式内置了几种常用的服务发现组件,下面分别介绍三种常用的服务发现组件:mDNS、Consul、Etcd

Consul和Etcd都是基于注册中心实现服务发现,大致原理如下图:

服务启动的时候,主动向注册中间注册自己的服务信息(服务名、Ip、port)

客户端,通过服务名去注册中心,查询服务信息,拿到对应的ip和port,一个服务名可能查询到多个服务地址,默认go micro框架的Selector模块,通过随机算法从多个服务地址中选择一个进行通信(这样也就实现了负载均衡处理),然后向服务发起接口调用。

提示:如果对服务发现还是不太了解,可以看下这篇博客:微服务之服务发现。

1.基于mDNS服务发现

上一章的例子,就是通过mDNS实现服务发现,这也是Go Micro框架默认的机制,不需要任何配置。

mDNS(多播DNS)是一种局域网内使用的DNS机制,他的大致原理如下:当有新的节点加入局域网的时候,如果打开了mDNS,就主动向局域网其他所有节点广播,自己提供的服务(域名是什么、ip地址是什么、端口号是什么), 这样我们任何一个节点都知道局域网提供了什么服务。

例如:

Go Micro微服务A启动的时候,通过mDNS协议,向局域网的所有节点,广播自己的服务名、Ip和端口号。 当另外一个微服务B,需要调用微服务A的,通过微服务A的服务名,去向mDNS查询ip地址和端口号,如果找不到,就向局域网广播询问,谁有微服务A的地址信息,通过这样的机制我们就可以找到同一个局域网内的服务信息。

提示:基于mDNS的服务发现,不需要额外的中间件和配置,适合个人开发做实验,团队多人合作开发,往往有部分微服务是在云服务器上面,通过mDNS无法查询这些服务的信息,生产环境也会选择其他服务发现中间件。

2.基于Consul的服务发现

Consul是解决服务发现、配置中心的分布式中间件,适合生产环境使用。

如果不熟悉Consul,可以点击这里了解下:Consul教程

当安装好Consul后,我们可以通过环境变量设置Go Micro的服务发现中间件配置。

例如:

MICRO_REGISTRY=consul \

MICRO_REGISTRY_ADDRESS=127.0.0.1:8500 \

go run orderservice.go

参数说明:

MICRO_REGISTRY - 注册中心类型,这里设置为consul

MICRO_REGISTRY_ADDRESS - 注册中心地址, IP + PORT的形式

运行后,你会发现增加一条类似的日志,说明服务信息已经注册到Consul了。

2019/10/29 22:08:13 Registry [consul] Registering node: go.micro.api.orderservice-da1e90a0-975b-4b55-81bf-7f1d846f559e

注意:使用consul后,所有微服务启动的时候都需要配置使用同一个consul,包括我们使用micro call 命令和启动其他mico组件,都需要配置register环境变量,否则会出现找不到服务的错误。

3.基于Etcd的服务发现

Etcd是强一致性的、分布式键值存储引擎,类似zookeeper。

当你安装好Etcd后,使用Etcd作为注册中心,让go micro微服务基于Etcd实现服务发现,配置方式跟consul类似。

例如:

MICRO_REGISTRY= etcd \

MICRO_REGISTRY_ADDRESS=127.0.0.1:2379 \

go run orderservice.go

参数说明:

MICRO_REGISTRY - 注册中心类型,这里设置为etcd

MICRO_REGISTRY_ADDRESS - 注册中心地址, IP + PORT的形式

找不到服务器micro,Go Micro服务发现相关推荐

  1. 微服务注册中心做了什么事——服务发现

    是否被一大堆的注册中心八股文淹没,不知道哪个是哪个,有啥区别甚至于不知道哪几个功能重叠互为替代,​请看下文. 服务发现 服务发现如何做到持续维护服务地址在动态运维中的时效性 那在正式开始学习之前呢,让 ...

  2. 找不到服务器micro,go-micro 找不到服务,server not found是什么原因?编译出来在linux下面可以,windows不行。...

    我按照go-micro官网介绍,写了一个demo,但是发现服务器可以运行,客服端显示找不到服务器,为什么呢? server端: package main import ( "context& ...

  3. 警告 初始化默认驱动器时出错“找不到运行 Active Directory Web 服务的默认服务器。”...

    在导入AD模块时报错如下 "警告 初始化默认驱动器时出错"找不到运行 Active Directory Web 服务的默认服务器." 报错的是web服务器,第一时间想到的 ...

  4. SRV记录用来标识某台服务器使用了某个服务,常见于微软系统的目录管理——深入的话需要去折腾Azure Active Directory...

    SRV记录 SRV记录 什么情况下会用到SRV记录? [SRV记录用来标识某台服务器使用了某个服务,常见于微软系统的目录管理] SRV记录的添加方式 A.主机记录处格式为:服务的名字.协议的类型 例如 ...

  5. sql 2008找不到服务器,sql server 2005 数据库迁移问题总结——错误 ‘80004005’ 在 sys.servers 中找不到服务器 ‘XXX’...

    SQL2005做转移的过程中遇到此问题,到时为了方便,转移方法直接采用的,停止A服务器,复制A服务器中的数据库,将此数据库加载到B服务器,重启B服务器,有可能这种迁移方法有问题,最后的结果就是,可以正 ...

  6. 在 sysservers 中找不到服务器,在 sys.servers 中找不到服务器的解决办法,自己解决的...

    一开始提示,在服务器中找不到在 sys.servers 中找不到服务器 'QPAccountsDBLink',先用select * from sys.servers  ,发现只能查到一个服务器名称,后 ...

  7. 怎么查找无线的dns服务器,无线找不到服务器dns地址

    无线找不到服务器dns地址 内容精选 换一换 只有管理员可以设置敏感操作,普通IAM用户只有查看权限,不能对其进行设置,如需修改,请联系管理员为您操作或添加权限.联邦用户在执行敏感操作时,不需要进行身 ...

  8. 打开浏览器显示找不到服务器DNS地址,电脑浏览器找不到服务器dns地址

    电脑浏览器找不到服务器dns地址 内容精选 换一换 用户已将购买的SSL证书配置到ELB中,访问域名时,存在部分电脑访问提示不受信任,且同一办公网络部分电脑反馈"Windows没有足够信息, ...

  9. 2.架设邮件服务器-windows 2003 POP3服务,SMTP服务收发邮件

    1.默认安装的系统是没有安装POP3组件,SMTP组件,搞个盘过来,或从网上下载一个i386(下载地址:http://down.spdns.com/i386.rar ). (1)从"控制面板 ...

最新文章

  1. NeHe教程Qt实现——lesson14
  2. 使用expvar进行监控
  3. PAT甲级1043 Is It a Binary Search Tree :[C++题解]判断二叉搜索树BST、给定前序序列和中序序列
  4. AI:神经网络调参(数据、层数、batch大小,学习率+激活函数+正则化+分类/回归)并进行结果可视化
  5. 2020年信息系统项目管理师真题讲解
  6. 一个傻瓜式构建可视化 web的 Python 神器
  7. 如何高效管理我的时间?——时间会给你最好的答案
  8. 关于oracle的certview
  9. Redis命令参考【EXPIRE】
  10. 开源 ERP 软件 Odoo 提速指南
  11. 2级c语言题库及答案,2019-C语言二级考试题库(含答案)
  12. C++原子量,内存序,无锁并发
  13. windows计算机资源管理器,windows10系统打开资源管理器的三种方法
  14. The Elder(树形dp 斜率优化)
  15. 《第四部分-练习题:微信朋友圈、支付宝支付功能测试点》
  16. 学习笔记14--环境感知传感器技术之毫米波雷达
  17. arm64_linux head.S的执行流程(3.18)- 12.msm8996 地址空间布局
  18. Python提取视频帧图片
  19. 智能秤方案设计——蓝牙体脂秤PCBA方案
  20. Microsoft Teams安装教程

热门文章

  1. 012 注解式异常处理器
  2. j2ee 上传下载 小记
  3. ASP.net2.0调试JavaScript脚本
  4. 关于FP Spread for Web Forms 2.0.0.0
  5. idea 切换git仓库_Idea切换git分支及合并
  6. Disable IE7 address bar:不显示IE地址栏
  7. automake的使用1
  8. java中的过滤器与监听器
  9. Linux-1:安装忘记密码CRT连接centos 6.5
  10. Windows命令行提取日期时间