0.Consul能做什么
- 服务发现-提供HTTP和DNS两种发现方式
- 健康监测-支持多种方式,HTTP、TCP、Docker、Shell脚本定制化
- KV存储-Key、Value的存储方式
- 多数据中心-Consul支持多数据中心
- 可视化web界面
1.Consul的安装
官网下载地址
下载完成后,直接解压出来,然后cmd转到此目录下直接输入consul.exe,会出现以下情况,代表安装成功:
然后输入consul agent -dev
即可开启本地服务,默认端口是8500
开启后,输入网址localhost:8500即可进入可视化web界面
2.配置使用Consul
直接复制前面的项目,把zookeeper的依赖改成Consul的依赖,然后端口设置为8016
<!--Consul client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
<version>2.2.4.RELEASE</version>
</dependency>
yml配置Consul,配置如下,设置端口,地址和服务名称
spring:
application:
name: cloud-payment-service
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: ${
spring.application.name}
主启动类记得加上@EnableDiscoveryClient
注解。
控制器如下:
@RestController
@Slf4j
@RequestMapping("/payment")
public class PaymentController {
@Value("${server.port}")
private String serverPort;
@GetMapping("/consul")
public String zkPayment(){
return "Spring Cloud with Consul , server port:"+serverPort;
}
}
配置完成后,启动项目,访问consul的可视化界面,可以看到服务已经注册成功。
3.注册消费者服务
跟使用zookeeper的消费者一样,只需要把zookeeper的依赖改为consul客户端的依赖
<!--Consul client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
<version>2.2.4.RELEASE</version>
</dependency>
容器配置类:
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
控制器:
@RestController
@Slf4j
@RequestMapping("/consumer/payment")
public class PaymentController {
/**要调用的服务地址*/
public static final String INVOKE_URL="http://cloud-payment-service";
@Autowired
private RestTemplate restTemplate;
@GetMapping("/consul")
public String paymentInfo(){
String result=restTemplate.getForObject(INVOKE_URL+"/payment/consul",String.class);
return result;
}
}
yml配置:
spring:
application:
name: cloud-consumerconsul-order
cloud:
consul:
port: 8500
host: localhost
discovery:
service-name: ${
spring.application.name}
server:
port: 9011
配置完成后,启动项目,注册成功
接口调用测试,调用成功。
5.三种注册中心的区别
关于CAP的概念
CAP的三大特性
- 一致性(Consistency)
- 可用性(Availability)
- 分区容错性(Partition tolerance)
在分布式系统的思想中最多只能同时满足其中的两个,CA,AP,CP这三种
- CA则是保证了数据的一致性与高可用性,但是放弃了分区容错性,与分布式系统的设计思想相违背,放弃了系统的可扩展性
- CP保证了分区容错性与一致性,会使用在数据一致性要求很高的场景,但是如果出现问题,会让用户体验降低
- AP则保证了高可用性与分区容错性,主要适用于对数据一致性不高的情况,就算返回给用户过时的数据问题也不大的情况
在分布式系统中,主要用到CP与AP两种
在Eureka中因为有自我保护机制,服务挂掉后不会立即给服务清除掉,所以是AP
在Zookeeper与Consul中,服务只要在一段时间内没有发送心跳包,健康监测失败,就会清除,所以是CP