选择consul 主要是为了后续的 service mesh 做基础和铺垫,与eureka 最大的不同点在于,数据信息存放的位置不同,eureka是存在客户端节点,consul则是存放在了服务器节点,至于网上大多数说的 cap ,eureka是基于ap,consul是基于cp,默认模式下确实是这样的区别,但是consul 支持三种模式,默认模式(选举期间与选举之后上一任leader还可以读,但不能写),严格数据统一模式(上一代leader也不能读,选举期间集群不可用)和第三种支持每个节点都能读写的模式

文中图片就不上传了,只是效果图,官网都有的。

consul 部署架构

consul 服务节点 需要单独下载部署。 spring cloud 集成了客户端发现discovery client 功能。

consul 下载:

官网选择对应操作系统下载二进制压缩包:https://www.consul.io/downloads.html

解压后可获取可执行的consul 文件, 将该文件拷贝至 PATH指定目录如 /usr/local/bin。

启动 consul

调试阶段启动dev开发模式,在终端执行

consul  agent -dev

启动成功后默认web UI 访问端口为 8500

在web UI 可查看注册到consul 的客户端节点信息 以及consul 服务节点信息。

spring cloud consul 集成

工程 pom.xml 引入集成 jar 包


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

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

引入 spring-boot-starter-actuator 主要是consul 对客户端节点的健康检查需要调用actuator中的 /actuator/health 接口。

在启动类中增加注解 @EnableDiscoveryClient

@EnableDiscoveryClient
@EnableSwagger2
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}

使用consul 需要配置服务名称与consul 服务节点地址信息和健康检查间隔等信息。

# tomcat配置
server:
  port: 7080

# 服务名称
spring:
  application:
    name: order-server
  cloud:
    # consul server地址
    consul:
      host: localhost
      port: 8500
      # 健康检查 一定要配置 结合 spring-boot-starter-actuator 使用
      discovery:
        health-check-path: /actuator/health
        health-check-interval: 10s

完成上述设置,启动服务,可在web ui 中查看是否注册成功。还可配合 spring cloud feign 组件实现服务指间调度。

consul cluster 生产环境部署

#  -server -bootstrap-expect 该命令是自荐模式 等待其他成员加入
consul agent -data-dir /opt/data -node=xxx.xxx.001 -bind=0.0.0.0 -datacenter = dc1 -ui -client=xx.xx.xx -server -bootstrap-expect 3

consul agent -data-dir /opt/data -node=xxx.xxx.002 -bind=0.0.0.0 -datacenter = dc1 -ui -client=xx.xx.xx -join=xxx.xxx.001

consul agent -data-dir /opt/data -node=xxx.xxx.003 -bind=0.0.0.0 -datacenter = dc1 -ui -client=xx.xx.xx -join=xxx.xxx.001


consul members
# 可以查看 集群成员

更多命令可查看官网进行查询:  https://www.consul.io/docs/agent/options.html