1.概述
在前面的文章我们已经提到过,服务发现是微服务架构不可或缺的基础设施组件,Eureka 作为 Spring Cloud 标准服务发现的实现组件之一,由 Netflix 公司研发,是目前企业用得最多的注册中心组件。Eureka 包含了 1.x 版本 和 2.x 版本,其中 1.x 版本在国内被广泛使用,Netflix 本来想趁热打铁,推出 Eureka 2.x 版本,然而就在 2018 年 7 月,其官方突然宣布 Eureka 2.0 的开源工作不再继续,并警告用户使用 2.x 版本来部署生产环境,需要自己承担一切后果。
在当时这样的背景之下,各大企业不得不需要重新考虑在注册中心组件上的技术选型,由于当时 Nacos 还没有被纳入到 Spring 官方正式项目大家庭中,所以并没有引起人们足够的关注,倒是 Spring 官方之前一直不温不火的 Consul 突然开始流行起来,成为中小企业首选的注册中心组件。Consul 全称 Spring Cloud Consul ,采用 Go 语言开发,是 Spring 官方的正式项目之一,是 Spring Cloud 大项目的组成部分。如同 Eureka 一样,Consul 也提供了非常方便整合 Spring Boot 项目的能力,同样只需要少量的注解和配置用户就可以快速地启用 Consul ,构建出大型分布式系统。Consul 不仅拥有服务发现的功能,还拥有 Eureka 没有的分布式配置中心功能,并且 Consul 可以很好地支持 Spring Cloud Netflix 相关的开源组件,例如 Ribbon、Zuul 等。
2.安装服务端
Consul 同样包含的服务端和客户端,其中服务端程序不需要我们像 Eureka 那样需要手动创建,已经提前发布在其官网上,截止到作者写该篇文章时 Consul 最新版为 1.7.2 。
2.1下载Consul管理台
Consul 下载地址:
官方网站:https://www.consul.io
下载地址:https://www.consul.io/downloads.html
2.2安装Consul管理台
实际开发中一般使用 Linux 环境部署 Consul,所以作者只演示在 Linux 环境的安装和启动,其他环境读者朋友可以查阅相关资料自己去安装和启动,作者演示的 Linux 注解 IP 地址为:192.168.0.149 。
第一步:安装 Consul。安装非常简单只需要解压 zip 文件即可:
[root@test home]# unzip consul_1.7.2_linux_amd64.zip
解压完成之后可以将 consul 命令 拷贝到 /usr/local/bin 目录中,这样就可以全局使用该命令。
[root@test software]# mv ./consul /usr/local/bin/
第二步:启动 Consul。执行以下命令启动:
consul agent -server -bind=192.168.0.149 -client=0.0.0.0 -bootstrap-expect=1 -data-dir=./data -node=server1 -ui
-server 表示以服务端身份启动
-bind 绑定主机地址,默认是 127.0.0.1
-client 指定客户端访问的 IP (consul 有丰富的 api 接口,这里的客户端指浏览器或调用方),0.0.0.0 表示不限制客户端 IP
-bootstrap-expect=1 表示 server 集群最低节点为 1,低于这个值将工作不正常(注:类似zookeeper一样,通常集群数为奇数,方便选举,consul采用的是raft算法)
-data-dir 表示指定数据的存放目录
-node 表示节点在 web ui 中显示的名称
-ui 表示启用web管理台
第三步:访问 Consul 管理台,管理台默认端口是 8500 。在浏览器输入地址 http://192.168.0.149:8500 即可访问。
注意:Consul 管理台目前存在一些 bug,在谷歌浏览器下会经常出现 Error 错误,建议使用其他浏览器打开,例如火狐浏览器。
Consul returned an error. You may have visited a URL that is loading an unknown resource,
so you can try going back to the root or try re-submitting your ACL
Token/SecretID by going back to ACLs.Try looking in our documentation
3.注册中心
3.1加入consul-discovery依赖
客户端程序整合 Consul 需要在 POM 中加入 spring-cloud-starter-consul-discovery 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<