• Spring Cloud:Consul基础知识


    一.基本概念

    Consul是一套开源的分布式服务发现和配置管理系统,由HashiCorp公司用Go开发。

    它提供微服务系统中的服务治理、配置中心、控制总线等功能。

    服务发现:提供HTTP和DNS两种发现方式。

    健康检测:支持多种方式,http、tcp、Docker、shell等

    kv存储:key、value存储方式

    多数据中心:Consul支持多数据中心。

    可视化web界面。

    二.安装(使用Docker)

    拉取镜像:

    docker pull consul
    

     运行:

    docker run --name consul -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600 consul agent -server -bootstrap-expect 1 -ui -bind=0.0.0.0 -client=0.0.0.0
    

    端口详解

    • 8500 : http 端口,用于 http 接口和 web UI访问;
    • 8300 : server rpc 端口,同一数据中心 consul server 之间通过该端口通信;
    • 8301 : serf lan 端口,同一数据中心 consul client 通过该端口通信; 用于处理当前datacenter中LAN的gossip通信;
    • 8302 : serf wan 端口,不同数据中心 consul server 通过该端口通信; agent Server使用,处理与其他datacenter的gossip通信;
    • 8600 : dns 端口,用于已注册的服务发现;

    参数详解:

    –net=host docker参数, 使得docker容器越过了net namespace的隔离,免去手动指定端口映射的步骤
    -server consul支持以server或client的模式运行, server是服务发现模块的核心, client主要用于转发请求
    -advertise 将本机私有IP传递到consul
    -retry-join 指定要加入的consul节点地址,失败后会重试, 可多次指定不同的地址
    -client 指定consul绑定在哪个client地址上,这个地址可提供HTTP、DNS、RPC等服务,默认是>127.0.0.1
    -bind 绑定服务器的ip地址;该地址用来在集群内部的通讯,集群内的所有节点到地址必须是可达的,>默认是0.0.0.0
    allow_stale 设置为true则表明可从consul集群的任一server节点获取dns信息, false则表明每次请求都会>经过consul的server leader
    -bootstrap-expect 数据中心中预期的服务器数。指定后,Consul将等待指定数量的服务器可用,然后>启动群集。允许自动选举leader,但不能与传统-bootstrap标志一起使用, 需要在server模式下运行。
    -data-dir 数据存放的位置,用于持久化保存集群状态
    -node 群集中此节点的名称,这在群集中必须是唯一的,默认情况下是节点的主机名。
    -config-dir 指定配置文件,当这个目录下有 .json 结尾的文件就会被加载,详细可参考https://www.consul.io/docs/agent/options.html#configuration_files
    -enable-script-checks 检查服务是否处于活动状态,类似开启心跳
    -datacenter 数据中心名称
    -ui 开启ui界面
    -join 指定ip, 加入到已有的集群中
    

    这里有一个坑,如果是单机版consul,-bootstrap-expect选项要设置为1,大于等于2将导致web界面出现500错误。

    访问 192.168.10.137:8500,出现如下web界面,说明consul安装成功。

    三.服务注册入驻Consul

     部分pom依赖:

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

     yml配置:

    server:
      port: 8006
    
    spring:
      application:
        name: consul-provider-payment
      cloud:
        consul:
          host: 192.168.10.137
          port: 8500
          discovery:
            service-name: ${spring.application.name}
            #心跳默认是关闭的,如果不开启,consul检查会认为该服务是unhealthy
            heartbeat:
              enabled: true
    

     主启动类:

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

     运行,观察consul的web界面,发现该服务已经被注册到consul中了

     三个注册中心异同:

    CAP  C:强一致性  A:可用性  P:分区容错性

  • 相关阅读:
    Firemonkey 控件设定字型属性及颜色
    ListView 使用 LiveBindings 显示超过 200 条记录
    Firemonkey ListView 获取项目右方「>」(Accessory) 事件
    XE7 Update 1 选 iOS 8.1 SDK 发布 iPhone 3GS 实机测试
    Firemonkey Bitmap 设定像素颜色 Pixel
    Firemonkey 移动平台 Form 显示使用 ShowModal 范例
    XE7 提交 App(iOS 8)提示「does not contain the correct beta entitlement」问题修复
    XE7 Android 中使用 MessageDlg 范例
    导出 XE6 预设 Android Style (*.style) 档案
    修正 Memo 設定為 ReadOnly 後, 無法有複製的功能
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/13616546.html
Copyright © 2020-2023  润新知