0%

【SpringCloud】服务注册中心:Consul

另一种服务注册中心使用:Consul


1 Consul简介

1.1 介绍

  • Consul是一套开源的分布式服务发现和配置管理系统
  • 提供微服务系统中的服务治理,配置中心,控制总线等功能

1.2 功能

  • 服务发现:提供http和dns两种发现方式
  • 健康监测:支持多种方式,http,tcp,docker,shell脚本定制化
  • KV存储:key,value存储方式
  • 多数据中心:Consul支持多数据中心
  • 可视化Web界面

1.3 下载地址

https://www.consul.io/downloads

1.4 使用教程


2 Consul安装

  • (1)下载解压得到:consul.exe
  • (2)命令行:consul agent -dev进行打开

3 服务端安装consul

  • (1)创建项目cloud-provider-consul-payment8006
  • (2)引入依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!-- consul -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<!-- web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  • (3)修改yaml
1
2
3
4
5
6
7
8
9
10
11
12
server:
port: 8006 #端口

spring:
application:
name: consul-payment-service #服务名称
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: ${spring.application.name}
  • (4)主启动类
1
2
3
4
5
6
7
@SpringBootApplication
@EnableDiscoveryClient // 表示自己是客户端
public class PaymentMain8006 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8006.class, args);
}
}
  • (5)Controller
1
2
3
4
5
6
7
8
9
10
11
@RestController
public class PaymentController {

@Value("${server.port}")
private String serverPort;

@GetMapping("/payment/consul")
public String paymentConsul() {
return "spring-cloud with consul, port: " + serverPort;
}
}
  • (6)启动测试

4 客户端安装consul

  • 客户端安装大部分与服务端一样,下面只列举需要更改的地方

  • (1)更改端口号,以及服务名称

1
2
3
4
5
6
server:
port: 81

spring:
application:
name: consul-order-service
  • (2)配置Bean
1
2
3
4
5
6
7
@Configuration
public class ApplicationContextConfig {
@Bean
public RestTemplate getTemplate() {
return new RestTemplate();
}
}
  • (3)更改Controller
1
2
3
4
5
6
7
8
9
10
11
12
13
@RestController
public class OrderConsulController {

private static final String PAYMENT_URL = "http://consul-payment-service";

@Autowired
private RestTemplate restTemplate;

@GetMapping("/consumer/payment/consul")
public String paymentInfo() {
return restTemplate.getForObject(PAYMENT_URL + "/payment/consul", String.class);
}
}

5 三种注册中心的异同

组件名 语言 CAP 服务健康检查 对外暴露接口 Spring Cloud集成
Eureka Java AP 可配支持 HTTP 已集成
Zookeeper Java CP 支持 客户端 已集成
Consul Java CP 支持 HTTP/DNS 已集成
  • CAP:
    • C:Consistency(强一致性)
    • A:Availability(可用性)
    • P:Partition tolerance(分区容错性)
  • AP:Eureka
  • CP:Zookeeper / Consul