美文网首页SpringCloud/Dubbo
Spring Cloud Consul服务注册与发现

Spring Cloud Consul服务注册与发现

作者: 意识流丶 | 来源:发表于2018-06-18 11:37 被阅读185次

    Spring Cloud ConsulHashiCorpVagrant的创建者)开发的一个服务发现与配置项目,与Docker容器可以无缝集成。Consul是一套开源的分布式服务发现和配置管理系统,支持多数据中心分布式高可用。用Go语言开发,基于 Mozilla Public License 2.0 的协议开源。

    Consul包含多个组件,但是作为一个整体,为你的基础设施提供服务发现和服务配置的工具.他提供以下关键特性:

    1.服务发现
    Consul的客户端可用提供一个服务,比如 api 或者mysql ,另外一些客户端可用使用Consul去发现一个指定服务的提供者.通过DNS或者HTTP应用程序可用很容易的找到他所依赖的服务。
    2.健康检查
    Consul客户端可用提供任意数量的健康检查,指定一个服务(比如:webserver是否返回了200 OK 状态码)或者使用本地节点(比如:内存使用是否大于90%).这个信息可由operator用来监视集群的健康.被服务发现组件用来避免将流量发送到不健康的主机。
    3.Key/Value存储
    应用程序可用根据自己的需要使用Consul的层级的Key/Value存储
    比如动态配置,功能标记,协调,领袖选举等等,简单的HTTP API让他更易于使用。
    4.多数据中心
    Consul支持开箱即用的多数据中心.这意味着用户不需要担心需要建立额外的抽象层让业务扩展到多个区域。

    Consul服务端安装

    由于Spring Cloud ConsulHashiCorp公司开发,并不是开发SpringPivotal团队,所以下载Consul官方的服务端
    Consul官网地址:https://www.consul.io/
    Consul服务端下载地址:https://www.consul.io/downloads.html

    对应自己的操作系统选择下载
    QQ截图20180617224540.png
    进行环境变量配置

    在系统变量Path下加上解压的根目录
    例如解压的是E盘下consul文件夹就写E:\consul

    QQ截图20180617225216.png

    验证是否配置成功

    cmd中输入consul

    QQ截图20180618111240.png
    出现以上信息就是配置成功了
    启动服务端

    windows系统在cmd下输入consul agent -dev看到以下界面就是启动成功,
    如果启动不了可以在cmd进入到consul根目录再输入consul agent -dev

    QQ截图20180617225535.png
    需要关闭服务端在cmd中按Ctrl+C就好了
    成功启动会Consul代理输出了一些日志信息。例如版本号,端口号(默认是8500)

    在浏览器中输入http://localhost:8500/可以进入到consul服务注册中心
    的界面(强烈推荐使用谷歌浏览器)

    QQ截图20180617225937.png

    SpringCloud与Consul客户端集成

    引入Spring Cloud Consul服务发现依赖和web依赖(不然注册不了)

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    

    在启动类中加上@EnableDiscoveryClient注解

    @SpringBootApplication
    @EnableDiscoveryClient
    public class SpringcloudConsulApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringcloudConsulApplication.class, args);
        }
    }
    

    在配置文件中加入Spring Cloud Consul相关配置

    spring:
      cloud:
        consul:
          host: localhost
          port: 8500
      application:
        name: springcloud-consul
    server:
      port: 9999
    

    刷新下服务注册中心的页面

    QQ截图20180617233523.png

    可以发现服务是注册上去了,但是服务状态为critical,说明这个服务还是失败的

    Consul规定了外部脚本退出码代表的语义:
    正常passing
    告警warning
    失败critical

    解决方法:

    1.需要手动加一个GET方法的健康检测API

    @RestController
    public class HealthApi {
        @GetMapping("/health")
        public String health(){
            return "hello consul";
        }
    }
    

    然后在配置文件中加上spring.cloud.consul.discovery.health-check-path的路径

    spring:
      cloud:
        consul:
          host: localhost
          port: 8500
          discovery:
            health-check-path: /health
      application:
        name: springcloud-consul
    server:
      port: 9999
    

    重新启动客户端

    QQ截图20180618105626.png
    可以看到我们注册的服务已经passing 通过了,说明服务注册成功
    其实在cmd上也可以看到

    QQ截图20180618105934.png
    Service 'springcloud-consul' check中可以看到我们自定义的健康检测和返回结果
    QQ截图20180618113359.png

    Consul用于检查运行状况端点的间隔默认是10s,每过10秒检测一次
    2.加入actuator依赖(推荐使用)

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    

    不需要改spring.cloud.consul.discovery.health-check-path,
    默认的就行,默认是/actuator/health

    QQ截图20180618112541.png
    通过健康检测可以看到服务状态是UP,服务已经注册到Consul

    相关文章

      网友评论

        本文标题:Spring Cloud Consul服务注册与发现

        本文链接:https://www.haomeiwen.com/subject/dergeftx.html