认识 HashiCorp Consul
官网介绍
- Consul is a distributed, highly available, and data center aware solution to connect and configure applications across dynamic, distributed infrastructure
Consul是一个分布式的、高可用的、支持数据中心的解决方案,可跨动态的、分布式的基础架构连接和配置应用程序
Consul
- https://www.consul.io
关键特性
-
可以做服务发现
-
可以做健康检查 根据特定的 endpoint 做检查 或者 根据 Consul 这些协议做个检查
-
KV 存储 信息
-
多数据中心支持 可以做配置中心
-
安全的服务间通信 通过加密的方式
使用 Consul 提供服务发现能力
Consul 的能力
- Service registry, integrated health checks, and DNS and HTTP interfaces enable any service to discover and be discovered by other services
服务注册表、集成的运行状况检查以及DNS和HTTP接口使任何服务都能够发现并被其他服务发现
好用的功能
-
HTTP API
通过http的方式 进行服务的注册和发现和一些健康检查的功能 -
DNS( xxx.service.consul )
通过访问域名的方式 去访问我的服务 替我们做负载均衡 在一些不能改动的基础设施上 通过这样的域名 去做访问 -
与 Nginx 联动,通过 ngx_http_consul_backend_module 实现
使用 Consul 作为注册中心
Spring Cloud Consul
- 引入 spring-cloud-starter-consul-discovery
简单配置
- spring.cloud.consul.host=localhost
- spring.cloud.consul.port=8500
- spring.cloud.consul.discovery.prefer-ip-address=true
使用ip注册
通过 Docker 启动 Consul
官方指引
- https://hub.docker.com/_/consul
获取镜像
- docker pull consul
运行 Consul 镜像
- docker run --name consul -d -p 8500:8500 -p 8600:8600/udp consul
例子
目录
consul-customer-service
consul-waiter-service
需要修改的代码
在pom文件中,使用 Consul 用来替换掉 Eureka 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
consul-customer-service
application.properties
server.port=0
management.endpoint.health.show-details=always
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.prefer-ip-address=true
bootstrap.properties
spring.application.name=customer-service
consul-waiter-service
application.properties
server.port=0
spring.jpa.hibernate.ddl-auto=none
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
info.app.author=DigitalSonic
info.app.encoding=@project.build.sourceEncoding@
server.port=0
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.prefer-ip-address=true
bootstrap.properties
spring.application.name=waiter-service
结果分析
运行程序 consul-waiter-service 并在docker中运行 Consul 输入 localhost:8500 进入 Consul主页
点击 waiter-service 可以看到它的相关信息
点击 waiter-service-0 可以看到它是如何做的健康检查 可以看到所有的details信息
运行 consul-customer-service 在控制台 我们可以看到 consul-customer-service 成功的访问到了 consul-waiter-service
同样 在localhost:8500中 也成功的注册了上去