zoukankan      html  css  js  c++  java
  • 微服务Consul系列之服务注册与服务发现

    在进行服务注册之前先确认集群是否建立,关于服务注册可以看上篇微服务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
    来源:慕课网
    本文首次发布于慕课网 ,转载请注明出处,谢谢合作

  • 相关阅读:
    算法分析之最大子段求和(一)
    算法分析之动态规划
    算法分析之数字三角形逆推
    算法分析之递归与分治策略
    算法分析之汉诺塔问题
    算法分析之猴子吃桃
    基于python玩转人工智能最火框架之TensorFlow人工智能&深度学习介绍
    win10 64下anaconda4.2.0(python3.5)
    PYTHON 爬虫 baidu美女图片
    falkonry
  • 原文地址:https://www.cnblogs.com/ExMan/p/11882413.html
Copyright © 2011-2022 走看看