03.服务注册中心之consul
Posted 潮汐先生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了03.服务注册中心之consul相关的知识,希望对你有一定的参考价值。
服务注册中心之consul
前言
上篇文章我们介绍了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.配置环境变量
我们打开系统环境变量设置窗口,将consul的安装目录配置进系统的环境变量path中,我这里是D:\\Program Files\\consul
配置完毕后我们打开命令行输入命令consul -v
,如果能正确打印输出版本信息,就说明我们的consul安装成功了
4.启动consul
我们上面说了,不能以双击consul.exe的方式启动consul,需要在命令行输入consul agent -dev
,如果命令执行完光标在底部闪烁而没有结束,说明我们的consul启动成了
-dev指的是以开发模式运行consul
-server指的是以服务器模式运行consul,而且必须是以集群的方式启动,这就要求必须要有两个及以上的consul节点才可以
在开发测试阶段我们使用-dev就行了,生产环境记得使用-server
5.consul的管理界面
consul默认端口是8500,上面我们已经启动了consul,我们输入地址http://localhost:8500
进入到consul的管理界面
consul
管理界面说明
- dc1(datacenter):我们上面说了consul是一个多数据中心,一个consul可以管理多个微服务系统,这样可以避免多个微服务的数据混为一体。我们可以将之理解为mysql数据库,不同的库对应不同的项目。dc1是默认的数据中心,我们可以通过命令手动切换数据中心,比如
consul agent -dev taobao
,这样我们新启动的微服务就会注册到consul的数据中心taobao中- Services:这里显示的是当前数据中心中注册的微服务列表,我们看到在刚启动的时候有一个consul的微服务,这是因为consul作为服务注册中心也注册了自己
- Nodes:这里是当前数据中心中的集群节点
- Key/Value:是说以后我们可以向consul中以key/value的形式存放数据
- ACL:指的是consul的版本控制
- Intentions:显示consul集成的其他组件
平时我们主要用到的就是dc1下面的Service和Nodes
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的安装与使用先简单介绍到这里ヾ(◍°∇°◍)ノ゙
以上是关于03.服务注册中心之consul的主要内容,如果未能解决你的问题,请参考以下文章