既然eureka不再维护,那么我们可以考虑其他的组件,比如consul。consul生态很好。
简介
Consul的主要特点是:
服务发现:Consul的客户可以注册服务,并且其他客户可以使用Consul来发现给定服务的提供者。使用DNS或HTTP,应用程序可以轻松找到它们所依赖的服务。
运行状况检查:Consul客户端可以提供任意数量的运行状况检查,这些检查与给定服务(“是Web服务器返回200 OK”)或本地节点(“内存利用率低于90%”)相关联。可以使用此信息来监控群集运行状况,服务发现组件使用该信息将流量路由远离不健康的主机。
KV存储:应用程序可以将Consul的分层键/值存储用于任何目的,包括动态配置,功能标记,协调,选举等。
安全服务通信:Consul可以为服务生成和分发TLS证书,以建立相互的TLS连接。可用于定义允许哪些服务进行通信。
多数据中心:Consul支持多个数据中心。
以上是从官网翻译的结果。
它提供的这些功能可以很方便地搭建一个注册中心。
下载安装
它不想eureka那样需要新建一个java工程来启动它,官网有打包好的可执行文件,我们需要下载安装在机器上,然后配置,运行。
- 下载地址https://www.consul.io/downloads.html
- 解压,解压后是一个可执行二进制文件
- 设置环境变量方便使用
- 检查:在shell中输入consul -v,有输出表示安装无误
单机版搭建
- 启动consul - consul agent -dev:agent代理,像是守护进程,-dev表示在开发环境中使用,可以快速搭建一个consul服务。但是所有的数据都不会持久化,仅用于开发。
- java工程 
依赖
| 1 | <!--注册--> | 
当然其它关于cloud和boot的依赖也得有
配置文件
| 1 | spring: | 
启动类
| 1 | 
 | 
效果
在浏览器中访问http://localhost:8500,可以看见以下页面:

还可以访问其它的信息,比如服务的健康信息,key/value,nodes等

当然consul还有更多的功能可以配置
集群搭建
为了保证注册中心的高可用,需要将注册中心搭建为集群。
在CAP理论中,Consul使用CP体系结构.
- 三台机器,或者使用vagrant模拟,或者使用docker镜像。
ip:172.20.20.20 ,172.20.20.21 ,172.20.20.22
- 三台机器启动consul
consul agent -server -bootstrap-expect=3 -data-dir=/tmp/consul -node=consul-server-1  -bind=192.168.43.174 -client=0.0.0.0
consul agent -server -bootstrap-expect=3 -data-dir=/tmp/consul -node=consul-server-2  -bind=192.168.43.174 -client=0.0.0.0 -join 127.20.20.20
consul agent -server -bootstrap-expect=3 -data-dir=/tmp/consul -node=consul-server-3  -bind=192.168.43.174 -client=0.0.0.0 -join 127.20.20.21
此时已经搭建了一个集群,在spring cloud中只需要配置任意一个consul节点就行了。
consul参数
| 1 | acl Interact with Consul's ACLs | 
更多请参考https://www.consul.io/docs/commands/index.html
agent参数
- -server,表示该节点以server模式运行,会持久化数据,建议几个数据中心只有3-5个server
- -client,表示节点以client模式运行,client不会持久化数据,只做数据转发,client可以提高consul效率
- -bootstrap-expect,表示期待的server节点的个数,可以不配置,如果配置需要保持一致
- -data-dir,consul数据存储的位置
- -node 该节点的名字
- -client表示监听所有
- -bind,绑定一个地址,需要每个consul都能访问到,用来consul之间通信
- -join,加入到某一个集群,值为这个集群中某一节点的ip
- -config-dir,配置文件所属的文件夹,consul会按照字典序读取所有的”.json” 或 “.hcl”文件,并且会合并配置:单配置覆盖,列表求并集
- -ui,web ui界面,在我的尝试中,不实用这个参数也能访问到web ui
这些如果全部写在命令中不合适,可以将其写在配置文件中,使用-config-dir 或 -config-file获得配置文件。
更多配置请参考https://www.consul.io/docs/agent/options.html
vs others
| feature | consul | zk | nacos | 
|---|---|---|---|
| 多数据中心 | 支持 | 支持 | 支持 | 
| kv存储 | 支持 | 支持 | 支持 | 
| 一致性 | raft | paxos | raft | 
| cap | cp | cp | cp | 
| 安全 | https/acl | acl(3.5.5支持https) | https | 
| metrics | ok | no | ok | 
另外nacos还可作为配置中心。
参考
https://www.consul.io/
https://blog.csdn.net/longgeqiaojie304/article/details/85259972
