在前面的步骤,我们运行了第一个代理,看到了集群的成员,并且查询了节点信息。在这篇指南里,我们将注册我们第一个服务并且查询这个服务。

定义一个服务

一个服务能够通过提供一个服务定义或者调用适当的HTTP API来注册。

服务定义是最通用的注册服务方法,那么我们将使用这种方法来注册服务。我们将建构一个代理配置,前面的步骤已经描述过。

首先,为Consul配置创建一个目录。Consul装载配置目录中所有的配置文件,通常在Unix系统中惯例是建立以名为 /etc/consul.d 的目录( .d 后缀暗示这个目录包含了一些配置文件的集合)。

$ sudo mkdir /etc/consul.d

下一步,我们将创建一个服务定义配置文件。我们假设我们有一个名为“web"服务,它运行在80端口。另外我们为它设置一个标记,那么我们就可以通过它来查询到这个服务:

$ echo '{"service": {"name": "web", "tags": ["rails"], "port": 80}}' \>/etc/consul.d/web.json

现在,我们重启代理,并提供配置目录参数:

$ consul agent -dev -config-dir /etc/consul.d
==> Starting Consul agent...
...[INFO] agent: Synced service 'web'
...

你会注意到在输出中"synced service 'web'"。这意味着代理已经从配置文件中装载了该服务定义,并且已经成功注册该服务到服务目录中。

如果你想注册多个服务,你可以在Consul配置目录中创建多个服务定义文件。

查询服务

一旦代理启动并且服务已经同步,我们就可以使用DNS或者HTTP API来查询服务了。

DNS API

让我们首先使用DNS API查询我们的服务。对于DNS API,服务的DNS名称是 NAME.service.consul 。默认所有的DNS名称都是在 consul 名称空间下,当然这个是可配置的。service 子域名告诉Consul我们正在查询服务,并且 NAME 就是要查询的服务的名称。

对于我们注册的web服务,对应的查询设置就是 web.service.consul :

$ dig @127.0.0.1 -p 8600 web.service.consul
...;; QUESTION SECTION:
;web.service.consul.        IN  A;; ANSWER SECTION:
web.service.consul. 0   IN  A   172.20.20.11

你可以看到,一个带了节点的IP地址的 A 记录被返回了,它就是可用的服务。 A 记录只能包含IP地址。

你也可以使用DNS API来获取完整的地址/端口的 SRV 记录:

$ dig @127.0.0.1 -p 8600 web.service.consul SRV
...;; QUESTION SECTION:
;web.service.consul.        IN  SRV;; ANSWER SECTION:
web.service.consul. 0   IN  SRV 1 1 80 Armons-MacBook-Air.node.dc1.consul.;; ADDITIONAL SECTION:
Armons-MacBook-Air.node.dc1.consul. 0 IN A  172.20.20.11

SRV 记录显示了web服务证运行在节点 Armons-MacBook-Air.node.dc1.consul. 的80端口上。额外的部分和 A 记录返回的内容一样。

最后,我们可以使用DNS API基于标记来过滤服务,基于标记的服务查询的格式是 TAG.NAME.service.consul 。 在下面的例子里,我们请求Consul查询所有含"rails"标记的web服务。我们得到了我们注册的带有该标记的服务的响应:

$ dig @127.0.0.1 -p 8600 rails.web.service.consul
...;; QUESTION SECTION:
;rails.web.service.consul.      IN  A;; ANSWER SECTION:
rails.web.service.consul.   0   IN  A   172.20.20.11

HTTP API

除了DNS API,HTTP API也可以用于服务查询:

$ curl http://localhost:8500/v1/catalog/service/web
[{"Node":"Armons-MacBook-Air","Address":"172.20.20.11","ServiceID":"web", \"ServiceName":"web","ServiceTags":["rails"],"ServicePort":80}]

该目录API返回了指定节点以及指定的服务信息。就像我们马上要看到了健康检测,通常我们的查询只是查询那些健康的实例,这些实例都是通过了健康检测的。这也是DNS在底层做的事情。下面的查询只查询健康的实例:

$ curl 'http://localhost:8500/v1/health/service/web?passing'
[{"Node":"Armons-MacBook-Air","Address":"172.20.20.11","Service":{ \"ID":"web", "Service":"web", "Tags":["rails"],"Port":80}, "Checks": ...}]

更新服务

当配置文件修改后服务定义可以被更新,需要发送 SIGHUP 信号给代理。这可以让代理更新服务而无需停止代理或者让服务查询时服务不可用。

可以选择HTTP API来动态地增加,删除,以及更改服务。

下一步

我们现在配置了一个单代理,并且注册了一个服务。进展非常不错,但是下一步我们会展示Consul里最有价值的特性,[设置我们第一个集群]()!

Consul入门03 - 注册服务相关推荐

  1. .net core grpc consul 实现服务注册 服务发现 负载均衡(二)

    在上一篇 .net core grpc 实现通信(一) 中,我们实现的grpc通信在.net core中的可行性,但要在微服务中真正使用,还缺少 服务注册,服务发现及负载均衡等,本篇我们将在 .net ...

  2. 服务发现系统之consul入门

    一.什么是consul? Consul是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,是由HashiCorp公司用Go语言开发的,基于Mozilla Public License 2. ...

  3. 基于 Consul 实现 MagicOnion(GRpc) 服务注册与发现

    0.简介 0.1 什么是 Consul Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置. 这里所谓的服务,不仅仅包括常用的 Api 这些服务,也包括软件开发过程 ...

  4. Spring Cloud Consul 注册服务failing,但是可以访问

    今天入门consul,尝试注册一个服务提供者,却发现 但是能正常访问,通过查询,知道这只是check failing,原因是缺少依赖 <!--consul中健康检查需要用到actuator,不添 ...

  5. dubbo注册服务和消费服务---入门篇

    本文介绍如何用dubbo+zk来实现一个注册服务 + 消费服务的入门小demo 需要环境:zk服务器 两个maven项目,一个负责提供服务,一个负责消费服务. dubbo-service 服务端 po ...

  6. .net core Ocelot Consul 实现API网关 服务注册 服务发现 负载均衡

    大神张善友 分享过一篇 <.NET Core 在腾讯财付通的企业级应用开发实践>里面就是用.net core 和 Ocelot搭建的可扩展的高性能Api网关. Ocelot(http:// ...

  7. Consul 入门指南

    一.安装 Consul Consul 下载地址:https://www.consul.io/downloads.html,下载后解压就是一个可执行的二进制文件consul,配置好环境变量,检查 con ...

  8. Spring Cloud入门-Sentinel实现服务限流、熔断与降级(Hoxton版本)

    文章目录 Spring Cloud入门系列汇总 摘要 Sentinel简介 安装Sentinel控制台 创建sentinel-service模块 限流功能 创建RateLimitController类 ...

  9. 最详细的Consul 入门教程

    一.什么是服务发现 微服务的框架体系中,服务发现是不能不提的一个模块.我相信了解或者熟悉微服务的童鞋应该都知道它的重要性.这里我只是简单的提一下,毕竟这不是我们的重点.我们看下面的一幅图片: 图中,客 ...

最新文章

  1. COZMO机器人的部分表情说明
  2. JDBC 2.0中的高级数据类型
  3. python常用单词汇总_在.txt文件中找到最常用单词的Python程序必须打印word及其连接...
  4. bash-shell高级编程--条件判断
  5. win10如何远程连接BCC云服务器?
  6. (04)Verilog HDL模块仿真激励
  7. Win11高效日历推荐
  8. 计算机桌面文件自动备份取消,设置电脑收银系统自动备份及备份清除功能
  9. 光环PMP 三模模拟题
  10. 超键、候选键、主键区别?
  11. Protobuf简单使用
  12. 关于iPhone删除无法删除的描述文件
  13. 【Go语言实战】(4) 简简单单的几十行代码实现 TCP 通信
  14. mysql 中 一个汉字吗_MySQL 中一个汉字占多少存储?
  15. 【Lesson 3】 小调音阶及小调和弦
  16. 一些我们关于端到端语音翻译的思考和尝试
  17. B站小甲鱼零基础python视频P57爬取煎蛋网OOXX妹纸图代码修改
  18. 形参和实参的定义和区别
  19. N1盒子armbian蓝牙连接详细步骤
  20. 200行Html5+CSS3+JS代码实现动态圣诞树

热门文章

  1. 《敏捷迭代开发:管理者指南》—第2章2.14节推荐读物
  2. 独家专访 | 从跨国投行到开源社区,IBM Spark总工程师Nick Pentreath的传奇经历
  3. 03-spring_配置bean
  4. udhcp源码详解(四) 之租赁IP的管理
  5. Open Source Bing Maps API for ASP.NET MVC
  6. Matlab读取txt文件中的数据(使用textread函数)
  7. Qt在Windows下的三种编程环境搭建
  8. Linux 下的格式化输出命令:print
  9. 北邮 复习 软件工程_软件工程的一些基本概念总结(北邮版本)
  10. string 中的offset_Kafka+Spark Streaming管理offset的两种方法