SpringCloud(5)使用Consul做为注册中心
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-servicecloud:consul:host: localhostport: 8500discovery: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@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}
}
控制器:
@RestController
@Slf4j
@RequestMapping("/consumer/payment")
public class PaymentController {/**要调用的服务地址*/public static final String INVOKE_URL="http://cloud-payment-service";@Autowiredprivate 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-ordercloud:consul:port: 8500host: localhostdiscovery: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
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
