Spring Cloud Consul 服务注册与发现

7 阅读2分钟

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

复制

特性与优势

  1. 多数据中心支持:Consul 可跨数据中心部署,避免单点故障。
  2. 强一致性:基于 Raft 协议,保证数据一致性。
  3. 服务发现与健康检查:支持 HTTP、TCP 等多种健康检查方式。
  4. 动态配置:通过 Consul 的 Key/Value 存储实现配置管理和动态刷新。

通过以上配置和实现,Spring Cloud Consul 提供了强大的服务治理能力,适用于微服务架构中的服务注册与发现场景。