一、Consul安装使用
1.1 what’s the consul?
Consul是Go语言编写的一个分布式高可用的服务网格解决方案,提供包括服务发现、配置和分段功能在内的全功能控制平面。它的每个功能都可以单独使用,也可以用它来构建完整的服务网格。
为什么要用它呢?因为Eureka很早之前已经宣布不再维护了,但是还有很多替代Eureka的注册中心,例如Nacos、Zookeeper以及接下来要介绍的Consul。
Consul使用Go语言编写,通过HTTP的方式向外提供服务;支持多数据中心;一致性协议使用的是Raft。这些年来Consul一直在活跃更新中,社区活跃度上很可靠。
1.2 Consul的功能
服务发现:
调用的客户端可以通过DNS或HTTP找到要调用的服务
健康检查:
Consul提供了健康检查机制,从简单的服务端是否可以返回200的响应码到较为复杂的内存使用率是否低于90%
使用Key/value进行存储信息:
接入Consul的应用可以根据需要使用Key/Value进行存储信息。提供了易用的HTTP接口来满足用户的动态配置、特征标记、协调和leader选举等功能
多数据中心:
Consul原生就支持多数据中心。这样用户就不用自己来实现多数据中心
1.3 Consul和Consul UI的安装使用
Consul的安装很简单,因为是用Go语言写的,最后是编译完成是一个可执行的文件。支持Window、macOS、Linux等平台。在官网上选择下载的版本即可:https://developer.hashicorp.com/consul/downloads
下载完成后,解压缩,然后执行,例如下面以开发者模式启动。正常启动Consul集群需要至少启动三个Consul
consul agent -dev
$ ./consul agent -dev ==> Starting Consul agent… Version: ‘1.15.2’ Build Date: ‘2023-03-30 17:51:19 +0000 UTC’ Node ID: ‘cd2c39c3-341c-6478-5daf-ab06807d30a8’ Node name: ‘DESKTOP-ILEN9BL’ Datacenter: ‘dc1’ (Segment: ‘
’) Server: true (Bootstrap: false) Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: 8502, gRPC-TLS: 8503, DNS: 8600) Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302) Gossip Encryption: false Auto-Encrypt-TLS: false HTTPS TLS: Verify Incoming: false, Verify Outgoing: false, Min Version: TLSv1_2 gRPC TLS: Verify Incoming: false, Min Version: TLSv1_2 Internal RPC TLS: Verify Incoming: false, Verify Outgoing: false (Verify Hostname: false), Min Version: TLSv1_2 ==> Log data will now stream in as it occurs:
2023-04-16T20:57:55.312+0800 [DEBUG] agent.grpc.balancer: switching server: target=consul://dc1.cd2c39c3-341c-6478-5daf-ab06807d30a8/server.dc1 from=
to= 2023-04-16T20:57:55.370+0800 [INFO] agent.server.raft: initial configuration: index=1 servers="[{Suffrage:Voter ID:cd2c39c3-341c-6478-5daf-ab06807d30a8 Address:127.0.0.1:8300}]" 2023-04-16T20:57:55.370+0800 [INFO] agent.server.raft: entering follower state: follower=“Node at 127.0.0.1:8300 [Follower]” leader-address= leader-id= 2023-04-16T20:57:55.371+0800 [INFO] agent.server.serf.wan: serf: EventMemberJoin: DESKTOP-ILEN9BL.dc1 127.0.0.1 2023-04-16T20:57:55.371+0800 [INFO] agent.server.serf.lan: serf: EventMemberJoin: DESKTOP-ILEN9BL 127.0.0.1 2023-04-16T20:57:55.371+0800 [INFO] agent.router: Initializing LAN area manager 2023-04-16T20:57:55.371+0800 [DEBUG] agent.grpc.balancer: switching server: target=consul://dc1.cd2c39c3-341c-6478-5daf-ab06807d30a8/server.dc1 from= to=dc1-127.0.0.1:8300 …..
然后浏览器可以访问:http://localhost:8500/ui/dc1/services。进入Consul的web界面
二、Spring Cloud Consul入门使用
2.1 what’s the Spring Cloud Consul?
Spring Cloud是Spring Cloud社区通过Spring Boot自动配置,实现的一套连接Consul使用的服务发现客户端功能。只需要简单的注解便可接入Consul,构建分布式系统。
2.2 Consul在Spring Cloud生态的作用
- 服务发现与注册,Spring Boot应用可以像Consul注册服务,通过Spring Cloud的服务发现标准
DiscoveryClient
(spring-cloud-common模块)来发现其他的服务。 - 支持Ribbon,实现客户端负载均衡
- 分布式配置中心,通过key/Value存储配置
- 控制总线,通过Consul events实现总线
2.3 Spring Cloud Consul入门
2.3.1 创建服务提供者(cloud-registry-consul-provider)
引入依赖:
|
|
编写个测试接口:
|
|
启动类:
|
|
配置文件:
|
|
2.3.2 创建消费者(cloud-registry-consul-consumer)
引入依赖:
|
|
创建feign客户端接口:
|
|
编写接口:
|
|
启动类:
|
|
配置文件:
|
|
2.3.3 启动测试
1、启动consul
2、启动服务提供者:cloud-registry-consul-provider
3、启动消费者:cloud-registry-consul-consumer
4、启动完成后,可以看到服务成功注册到Consul
5、可在浏览器调用
http://localhost:8080/consumer/getProviderInfo
可看到响应:
provider name: cloud-registry-consul-provider, port: 8666