前言

上篇文章我们介绍了Netflix eureka。我们也知道eureka目前新版本已经停止更新了,并且eureka作为服务注册中心对于程序员来讲需要代码形式开发一个服务注册中心。相对于eureka而言,consul已经帮我们实现了服务注册中心,不需要程序猿(媛)手动实现,只要电脑上安装了consul,开发人员只需专注于微服务业务逻辑的实现就可以了。

介绍

consul是一个可以提供服务发现,健康检查,多数据中心,Key/Value存储等功能的分布式服务框架,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案,使用起来也较为简单。Consul用Golang实现,因此具有天然可移植性(支持Linux、Windows和Mac OS X);安装包仅包含一个可执行文件,方便部署。

安装

1.下载consul

https://www.consul.io/downloads

2.安装consul

上一部我们下载到的是consul的zip压缩包,解压后我们得到的是一个.exe的可执行文件,但是不能直接双击运行o(╥﹏╥)o。我们将解压得到的consul的可执行文件放到指定目录下面(注意该目录路径不能包含汉字)

3.配置环境变量

D:\Program Files\consul
consul -v

4.启动consul

consul agent -dev

-dev指的是以开发模式运行consul

-server指的是以服务器模式运行consul,而且必须是以集群的方式启动,这就要求必须要有两个及以上的consul节点才可以

在开发测试阶段我们使用-dev就行了,生产环境记得使用-server

5.consul的管理界面

http://localhost:8500
consulconsul agent -dev taobao

Consul的客户端开发

客户端是相对于Server来讲的,我们使用consul作为服务注册中心,那么consul就是我们Server,而注册到consul中的一个个的微服务就是我们的client。下面我们来开发一个consul的客户端

1.新建Module

点击finish后完成项目的创建

2.pom.xml

首先我们需要引入springboot的依赖与consul客户端依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springcloud_parent</artifactId>
        <groupId>com.christy</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>02.springcloud_consul_client</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- 引入springboot依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- 引入consul客户端依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>
    </dependencies>

</project>

3.application.properties

server.port=8889
spring.application.name=CONSUL-CLIENT
# 注册consul服务的主机
spring.cloud.consul.host=localhost
# 注册consul服务的端口号
spring.cloud.consul.port=8500

# 关闭consu了服务的健康检查[不推荐]
# spring.cloud.consul.discovery.register-health-check=false
# 指定注册的服务名称 默认就是应用名
# spring.cloud.consul.discovery.service-name=${spring.application.name} 

4.ConsulClientApplication

package com.christy;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * @Author Christy
 * @Date 2021/5/28 14:35
 **/
@SpringBootApplication
@EnableDiscoveryClient
public class ConsulClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsulClientApplication.class, args);
    }
}

5.启动

上面工作准备完毕后我们就可以启动项目了,项目启动后我们回到consul的管理界面

启动后可以发现我们的微服务已经成功注册到了consul中,但是状态确是不可用

原因:consul server会检测所有客户端心跳,但是发送心跳时client必须给予响应才能使该服务正常使用。这就要求我们在项目中一如健康检查的依赖

6.引入健康检查

在pom.xml文件中引入下面的依赖

<!-- 健康度监控-->
<!-- 我们也可以在properties中关闭健康检查(不推荐):spring.cloud.consul.discovery.register-health-check=false -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

然后重新启动项目,回到我们的consul的管理界面可以看到服务正常

consul与eureka不同,他没有自我保护机制,当我们的微服务与注册中心断开,服务也随机不可用

consul的安装与使用先简单介绍到这里ヾ(◍°∇°◍)ノ゙