Springcloud微服务注册中心之Consul
序言
现在市面上越来越多的企业采用分布式微服务来搭建项目,而在微服务架构中,注册中心是其核心的基础服务之一。注册中心的作用是提供完善实现服务治理功能,而选择什么注册中心也是微服务项目架构中的一环。
一、什么是注册中心
在现实生活中,当我们想要联系某一个人的时候,我们会拿出手机,打开通讯录,找到那个人的电话号码,然后拨出去,之后只要那个人接了电话,我们就可以通话了。其实,注册中心就相当于这个“通讯录”,只不过这个“通讯录”中记录服务与服务地址的映射关系。在微服务架构中,如果服务A想要调用服务B时,就需要到注册中心里面找到服务B的地址,之后进行调用,如下图:
二、注册中心的作用
前面我们知道注册中心是什么,那么注册中心有什么用呢。如果仅仅是在注册中心中找到服务与服务地址的映射关系,那么不一定需要单独的服务来去管理这些。在分布式系统中,需要考虑更多更复杂的问题:如服务在注册之后,如何被及时的发现;服务宕机后,如何及时下线;服务如何进行扩展;服务出现异常时,如何进行处理等等一系列问题。而这些问题的解决都依赖与注册中心。
在我看来,注册中心解决了服务的注册与发现,同时给与其他问题解决提供了支持。
三、常见的注册中心
在java体系中,我们常见的注册中心有Dubbo,Eureka,Nacos,Consul等,具体采用哪种,就见仁见智了,我们下面要讲的就是Consul。
四、Consul简介
Consul 是 HashiCorp 公司推出的开源工具,官方网址:https://www.consul.io/ ,用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其它工具(比如 ZooKeeper 等)。使用起来也较 为简单。Consul 使用 Go 语言编写,因此具有天然可移植性(支持Linux、windows和Mac OS X);安装包仅包含一个可执行文件,方便部署,与 Docker 等轻量级容器可无缝配合。
五、Consul工作原理
工作原理如下图:
具体流程如下:
- 1、当 Producer 启动的时候,会向 Consul 发送一个 post 请求,告诉 Consul 自己的 IP 和 Port
- 2、Consul 接收到 Producer 的注册后,每隔10s(默认)会向 Producer 发送一个健康检查的请求,检验Producer是否健康
- 3、当 Consumer 发送 GET 方式请求 /api/address 到 Producer 时,会先从 Consul 中拿到一个存储服务 IP 和 Port 的临时表,从表中拿到 Producer 的 IP 和 Port 后再发送 GET 方式请求 /api/address
- 4、该临时表每隔10s会更新,只包含有通过了健康检查的 Producer
六、Consul安装
可以直接去官网下载,下载地址:https://www.consul.io/downloads.html。
下载后,解压到一个没有中文的目录下,之后以管理员身份运行cmd,进入Consul目录,运行下面的命令:
consul agent -dev -ui -node=cy
# -dev开发服务器模式启动,-node结点名为cy,-ui可以用界面访问,默认能访问
访问http://localhost:8500/,看到下面的界面表示成功:
七、使用Consul作为注册中心整合springcloud
使用maven创建工程ConsulTest,在pom.xml中引入依赖:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/><!--表示每次都不从本地仓库找jar包,优先从*仓库找-->
</parent>
<dependencies>
<!-- SpringBoot整合Web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
</dependencies>
创建配置文件application.yml
创建启动类:
@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class ConsulApp {
public static void main(String[] args) {
SpringApplication.run(ConsulApp.class, args);
}
@GetMapping("/testConsul")
public String testConsul(){
return "注册进入consul成功!";
}
}
运行测试类,在Consul界面查看服务:
之后在浏览器中访问http://localhost:8083/testConsul,出现对应输出则为成功。
上一篇: HashMap实现原理和扩容机制
下一篇: JavaFX报错“ javafx.fxml.LoadException: Root hasn't been set. Use method setRoot() before load"
推荐阅读
-
SpringCloud之服务注册与发现Spring Cloud Eureka实例代码
-
服务注册中心之ZooKeeper系列(一)
-
SpringCloud微服务实战:一、Eureka注册中心服务端
-
.Net Core with 微服务 - Consul 注册中心
-
SpringCloud-服务注册与实现-Eureka创建服务注册中心(附源码下载)
-
springcloud之服务注册与发现(zookeeper注册中心)-Finchley.SR2版
-
转:SpringCloud服务注册中心比较:Consul vs Zookeeper vs Etcd vs Eureka
-
springCloud使用Nacos作为服务发现与注册中心,配置中心
-
SpringCloud + Nacos 做服务注册与配置中心
-
SpringCloud - (八)Eureka高可用服务注册中心