Spring Cloud Consul 服务注册与发现
Spring Cloud Consul 是基于 Consul 的服务治理解决方案,提供了服务注册、发现、健康检查等功能,适用于微服务架构。Consul 是 HashiCorp 推出的分布式服务工具,支持 HTTP 和 DNS 接口,具有强一致性和多数据中心支持。
服务注册与发现
在 Spring Cloud 中,Consul 提供了服务注册和发现功能。服务启动时会向 Consul 注册自身的元数据(如 IP、端口、服务名等),并通过健康检查确保服务可用性。以下是基本配置和实现步骤:
服务端配置
- 依赖引入:
org.springframework.cloud
spring-cloud-starter-consul-discovery
- 配置文件:
spring:
application:
name: service-producer
cloud:
consul:
host: localhost
port: 8500
discovery:
serviceName: service-producer
server:
port: 8501
- 启动类:
@SpringBootApplication
@EnableDiscoveryClient
public class ConsulProducerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsulProducerApplication.class, args);
}
}
- 服务接口:
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "hello consul";
}
}
客户端配置
- 依赖引入:
org.springframework.cloud
spring-cloud-starter-consul-discovery
- 配置文件:
spring:
application:
name: service-consumer
cloud:
consul:
host: localhost
port: 8500
discovery:
register: false
server:
port: 8503
- 服务调用:
@RestController
public class ServiceController {
@Autowired
private LoadBalancerClient loadBalancer;
@RequestMapping("/call")
public String call() {
ServiceInstance instance = loadBalancer.choose("service-producer");
return new RestTemplate().getForObject(instance.getUri() + "/hello", String.class);
}
}
健康检查与负载均衡
Consul 默认通过 /actuator/health 进行健康检查,间隔时间可配置。客户端通过 LoadBalancerClient 或 RestTemplate 实现服务调用,并支持轮询负载均衡。
健康检查配置
spring:
cloud:
consul:
discovery:
healthCheckPath: /actuator/health
healthCheckInterval: 15s
特性与优势
- 多数据中心支持:Consul 可跨数据中心部署,避免单点故障。
- 强一致性:基于 Raft 协议,保证数据一致性。
- 服务发现与健康检查:支持 HTTP、TCP 等多种健康检查方式。
- 动态配置:通过 Consul 的 Key/Value 存储实现配置管理和动态刷新。
通过以上配置和实现,Spring Cloud Consul 提供了强大的服务治理能力,适用于微服务架构中的服务注册与发现场景。