在进行服务注册之前先确认集群是否建立,关于服务注册可以看上篇微服务Consul系列之集群搭建的介绍,两种注册方式:一种是注册HTTP API、另一种是通过配置文件定义,下面讲解的是基于后者配置文件定义的形式,也是Consul官方所建议的方式。

准备工作

以下是上节做Consul集群的时候列的机器列表,下面我们将192.168.6.131机器安装了Node服务,起了两个端口

机器 模式 节点名称
192.168.6.128 Server consul_1(初始设置为Leader)
192.168.6.129 Server consul_2
192.168.6.130 Server consul_3
192.168.6.131 Client consul_4
  • 服务一:order_service
$ curl http://192.168.6.131:3010/health
ok
  • 服务二:user_service
$ curl http://192.168.6.131:3011/health
ok

服务注册

对order_service、user_service两个服务在consul_4节点上进行服务定义,配置中包含了服务的名称、地址、端口以及每10秒中对服务进行一次健康检查。

  • 注册服务一:order_service

order_service.json

{
"service":{
"name":"order_service",
"address":"192.168.1.131",
"port": 3010,
"enable_tag_override": false,
"check":{
"deregisterCriticalServiceAfter":"90m",
"http":"http://192.168.1.131:3010/health",
"interval":"10s"
}
}
}
  • 注册服务二:user_service

user_service.json

{
"service":{
"name":"user_service",
"address":"192.168.1.131",
"port": 3011,
"enable_tag_override": false,
"check":{
"deregisterCriticalServiceAfter":"90m",
"http":"http://192.168.1.131:3011/health",
"interval":"10s"
}
}
}
  • 启动consul_4进行服务注册

Consul Agent启动过程中通过指定-config-dir参数可以定位到配置文件所在目录,且目录下文件为.json的都会被Consul Agent配置文件所读取。

$ sudo consul agent -config-file=/usr/src/consul/consul_config.json -join=192.168.6.128 -config-dir=/etc/consul.d

服务注册成功之后查看我们的Web管理界面,在consul_4中展示了我们上面定义的两个服务及端口号

下图为Web管理界面展示的健康检查情况,可以看到进行了接口请求,且响应状态为200,输出结果为ok。

服务发现

Consul服务发现支持HTTP APIDNS两种方式

  • HTTP API
$ curl http://192.168.6.128:8500/v1/catalog/service/order_service?passing=true

执行命令之后返回Consul的注册信息、服务信息及健康检查信息,且指定passing=true,表示返回时过滤掉一些不健康的节点。

[
{
"ID":"cf35869a-edba-5e1f-77e0-922b55ddfad4",
"Node":"consul_4",
"Address":"192.168.6.131",
"Datacenter":"consul_cluster",
"TaggedAddresses":{
"lan":"192.168.6.131",
"wan":"192.168.6.131"
},
"NodeMeta":{
"consul-network-segment":""
},
"ServiceKind":"",
"ServiceID":"order_service",
"ServiceName":"order_service",
"ServiceTags":[ ],
"ServiceAddress":"192.168.6.131",
"ServiceWeights":{
"Passing":1,
"Warning":1
},
"ServiceMeta":{ },
"ServicePort":3010,
"ServiceEnableTagOverride":false,
"ServiceProxyDestination":"",
"ServiceProxy":{ },
"ServiceConnect":{ },
"CreateIndex":3818,
"ModifyIndex":3818
}
]
  • DNS方式

现在使用第二种DNS方式查询具体的服务,Consul提供了默认的名字NAME.service.consul,NAME代指注册的服务名称。

对于上面注册的两个Web服务对应域名分别为order_service.service.consuluser_service.service.consul,下面先对于order_service.service.consul进行服务查询

$ dig @192.168.6.128 -p 8600 order_service.service.consul        

; <<>> DiG 9.10.3-P4-Ubuntu <<>> @192.168.6.128 -p 8600 order_service.service.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31324
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 2
;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;order_service.service.consul. IN A ;; ANSWER SECTION:
order_service.service.consul. 0 IN A 192.168.6.131 ;; ADDITIONAL SECTION:
order_service.service.consul. 0 IN TXT "consul-network-segment=" ;; Query time: 1 msec
;; SERVER: 192.168.6.128#8600(192.168.6.128)
;; WHEN: Thu Mar 28 16:55:27 PDT 2019
;; MSG SIZE rcvd: 109

如上所示,ANSWER SECTION:一个A记录返回了一个服务所在的节点IP地址为:192.168.6.131

为了展示更详细的信息,在dig命令中我们可以加上SRV参数,可以返回服务所在的节点信息、端口号。

$ dig @192.168.6.128 -p 8600 order_service.service.consul SRV

; <<>> DiG 9.10.3-P4-Ubuntu <<>> @192.168.6.128 -p 8600 order_service.service.consul SRV
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52707
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 3
;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;order_service.service.consul. IN SRV ;; ANSWER SECTION:
order_service.service.consul. 0 IN SRV 1 1 3010 consul_4.node.consul_cluster.consul. ;; ADDITIONAL SECTION:
consul_4.node.consul_cluster.consul. 0 IN A 192.168.6.131
consul_4.node.consul_cluster.consul. 0 IN TXT "consul-network-segment=" ;; Query time: 1 msec
;; SERVER: 192.168.6.128#8600(192.168.6.128)
;; WHEN: Thu Mar 28 17:19:29 PDT 2019
;; MSG SIZE rcvd: 164

如上所示,ADDITIONAL SECTION:一个A记录不止,返回了一个服务所在的节点IP地址为:192.168.6.131,还有节点名称及数据中心,在ANSWER SECTION:中还可以看到服务的端口号信息。

服务异常情况

现在我们来做些处理将consul_4节点上的order_service服务停掉,此时可以看到故障服务order_service已经不在当前结果列表页了,保证了客户端在服务发现过程中只能获取当前可用的服务节点。

$ dig @192.168.6.128 -p 8600 order_service.service.consul                      

; <<>> DiG 9.10.3-P4-Ubuntu <<>> @192.168.6.128 -p 8600 order_service.service.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 45049
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;order_service.service.consul. IN A ;; AUTHORITY SECTION:
consul. 0 IN SOA ns.consul. hostmaster.consul. 1553830680 3600 600 86400 0 ;; Query time: 0 msec
;; SERVER: 192.168.6.128#8600(192.168.6.128)
;; WHEN: Thu Mar 28 20:38:00 PDT 2019
;; MSG SIZE rcvd: 107

如上所示,已经没有了ADDITIONAL SECTION:区域信息。

再来看下在健康检查端,列出了不健康的节点consul_4,标注了哪些是健康状态和哪些是非正常状态的服务。

点击consul_4可以看到详细的健康检查信息结果,例如上面我们停掉的order_service服务返回链接被拒。

作者:五月君
链接:https://www.imooc.com/article/284030
来源:慕课网
本文首次发布于慕课网 ,转载请注明出处,谢谢合作

微服务Consul系列之服务注册与服务发现的更多相关文章

  1. 微服务Consul系列之服务部署、搭建、使用

    使用Consul解决了哪些问题 是否在为不同环境来维护不同项目配置而发愁 是否有因为配置的更改导致代码还要进行修改.发布因为客流量大了还要规避开高峰期等到半夜来发布 微服务架构下应用的分解业务系统与服 ...

  2. 微服务Consul系列之集群搭建

    在上一篇中讲解了Consul的安装.部署.基本的使用,使得大家有一个基本的了解,本节开始重点Consul集群搭建,官方推荐3-5台Server,因为在异常处理中,如果出现Leader挂了,只要有超过一 ...

  3. .Net Core with 微服务 - Consul 注册中心

    上一次我们介绍了 Ocelot 网关的基本用法.这次我们开始介绍服务注册发现组件 Consul 的简单使用方法. 服务注册发现 首先先让我们回顾下服务注册发现的概念. 在实施微服务之后,我们的调用都变 ...

  4. 【转】用 Consul 来做服务注册与服务发现

    原文:https://segmentfault.com/a/1190000018731395?utm_source=tag-newest ------------------------------- ...

  5. Prometheus 通过 consul 分布式集群实现自动服务发现

    转载自:https://cloud.tencent.com/developer/article/1611091 1.Consul 介绍 Consul 是基于 GO 语言开发的开源工具,主要面向分布式, ...

  6. RPC原来就是Socket——RPC框架到dubbo的服务动态注册,服务路由,负载均衡演化

    序:RPC就是使用socket告诉服务端我要调你的哪一个类的哪一个方法然后获得处理的结果.服务注册和路由就是借助第三方存储介质存储服务信息让服务消费者调用.然我们自己动手从0开始写一个rpc功能以及实 ...

  7. .Net Core 商城微服务项目系列(二):使用Ocelot + Consul构建具备服务注册和发现功能的网关

    1.服务注册 在上一篇的鉴权和登录服务中分别通过NuGet引用Consul这个包,同时新增AppBuilderExtensions类: public static class AppBuilderEx ...

  8. 微服务~Consul服务注册与发现

    服务发现是基于微服务架构的关键原则之一.尝试配置每个客户端或某种形式的约定可能非常困难,可以非常脆弱.Consul通过HTTP API和DNS提供服务发现服务.Spring Cloud Consul利 ...

  9. .Net Core 微服务容器系列基础目录篇

    1.开场白 HI,各位老铁,大家端午好,之前写了些关于.net core商城系列的文章,有点乱,今天心血来潮想着整理一下(今天只是先把目录列出来,后面的每篇文章这两天会进行重新修改的,目前先将就看下) ...

随机推荐

  1. Windows异常的分发处理流程

    根据异常来源,一般分硬件异常和软件异常,它们处理的流程大致一样,下面简单讲一下. 如果是硬件异常,CPU会根据中断类型号转而执行对应的中断处理程序.CPU会在IDT中查找对应的函数来处理,各个异常处理 ...

  2. Cogs 1708. 斐波那契平方和(矩阵乘法)

    斐波那契平方和 ★★☆ 输入文件:fibsqr.in 输出文件:fibsqr.out 简单对比 时间限制:0.5 s 内存限制:128 MB [题目描述] ,对 1000000007 取模.F0=0, ...

  3. 第12组 Alpha冲刺(1/6)

    Header 队名:To Be Done 组长博客 作业博客 团队项目进行情况 燃尽图(组内共享) 展示Git当日代码/文档签入记录(组内共享) 注: 由于GitHub的免费范围内对多人开发存在较多限 ...

  4. C# 使用大漠插件, 源码在Github和码云 ..希望对大家有所帮助

    c# 使用大漠插件. 完成 类似 按键精灵的 功能. 方法 注释 正在慢慢的 完善中 目录 仓库 github 码云 准备 效果图 如何运行 1. 注册 大漠dll 到com (资源在 源码 DLL ...

  5. computed的用法

    其实在摸板中也是可以做简单的计算的,但是会看起来会很乱 ,可以用computed来做计算 <!DOCTYPE html> <html lang="en"> ...

  6. css去除图片间隙

    问题如下图 把图片转换成块状元素即可 .img{ display: block; } 解决后:

  7. sql中的表值函数与标量值函数区别与用法

    通俗来讲: 听名字就知道区别了 表值函数返回的是一张表结果,就和一个select查询语句一样,只不过里面带入了参数或者很复杂:标量值函数返回的只是一个值 一 .表值函数又分为内联函数与多语句函数 (1 ...

  8. argmin ,argmax函数

    在数学中,ARG MAX(或ARGMAX)代表最大值,即给定参数的点集,给定表达式的值达到其最大值: 换一种说法, 是f(x)具有最大值M的x的值的集合.例如,如果f(x)是1- | x |,那么它在 ...

  9. TP5 查询 字符串条件如何实现

      TP5 查询 字符串条件如何实现 当查询条件是 (1,3,8) ,3,4) 这种情况改如何查询呢?   主要用到FIND_IN_SET $where[ ]=>['exp',Db::raw(& ...

  10. Windows上安装nodejs版本管理器nvm 安装成功之后重启终端失效

    nvm 安装成功之后重启终端失效(command not found) 安装nvm之后node不可用,“node”不是内部或外部命令,也不是可运行的程序或批处理文件(ng) 安装nvm: 下载nvm压 ...