目录
一、Consul简介
(一)官网
(二)特点
二、安装并运行Consul
(一)官网安装说明
(二)下载
(三)使用开发模式启动
三、服务提供者
四、服务消费者
五、三个注册中心异同点
(一)CAP理论
(二)AP架构
(三)CP架构
一、Consul简介
(一)官网
What is Consul? | Consul | HashiCorp Developer
HashiCorp Consul 是一种服务网络解决方案,使团队能够管理服务之间以及跨本地和多云环境和运行时的安全网络连接。Consul 提供服务发现、服务网格、流量管理和网络基础设施设备的自动更新。可以在单个 Consul 部署中单独或一起使用这些功能。
(二)特点
1、服务发现 提供HTTP和DNS两种发现方式。
2、健康监测 支持多种方式,HTTP、TCP、Docker、Shell脚本定制化监控
3、KV存储 支持Key、Value的存储方式
4、多数据中心 Consul支持多数据中心
5、可视化Web界面
二、安装并运行Consul
(一)官网
Deploy Consul server | Consul | HashiCorp Developer
也可以参照中文文档Spring Cloud Consul 中文文档 参考手册 中文版
(二)下载
Install | Consul | HashiCorp Developer
下载完成后只有一个consul.exe文件,通过命令行窗口,查看版本号信息【consul --version】
(三)使用开发模式启动
【consul agent -dev】
通过以下地址可以访问Consul的首页:http://localhost:8500
三、服务提供者
(一)新建Module
cloud-providerconsul-payment8006
(二)POM
<dependencies><!--SpringCloud consul-server --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId></dependency><!-- SpringBoot整合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><!--日常通用jar包配置--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>
(三)YML
###consul服务端口号
server:port: 8006spring:application:name: consul-provider-payment
####consul注册中心地址cloud:consul:host: localhostport: 8500discovery:#hostname: 127.0.0.1service-name: ${spring.application.name}
(四)主启动类
@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain8006
{public static void main(String[] args){SpringApplication.run(PaymentMain8006.class,args);}
}
(五)业务类Controller
@RestController
public class PaymentController
{@Value("${server.port}")private String serverPort;@GetMapping("/payment/consul")public String paymentInfo(){return "springcloud with consul: "+serverPort+"\t\t"+ UUID.randomUUID().toString();}
}
(六)验证
四、服务消费者
(一)新建Module
cloud-consumerconsul-order80
(二)POM
<dependencies><!--SpringCloud consul-server --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId></dependency><!-- SpringBoot整合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><!--日常通用jar包配置--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>
(三)YML
###consul服务端口号
server:port: 80spring:application:name: cloud-consumer-order
####consul注册中心地址cloud:consul:host: localhostport: 8500discovery:#hostname: 127.0.0.1service-name: ${spring.application.name}
(四)主启动类
@SpringBootApplication
@EnableDiscoveryClient //该注解用于向使用consul或者zookeeper作为注册中心时注册服务
public class OrderConsulMain80
{public static void main(String[] args){SpringApplication.run(OrderConsulMain80.class,args);}
}
(五)配置Bean和业务类Controller
Bean
@Configuration
public class ApplicationContextBean
{@Bean@LoadBalancedpublic RestTemplate getRestTemplate(){return new RestTemplate();}
}
Controller
@RestController
public class OrderConsulController
{public static final String INVOKE_URL = "http://cloud-provider-payment"; //consul-provider-payment@Autowiredprivate RestTemplate restTemplate;@GetMapping(value = "/consumer/payment/consul")public String paymentInfo(){String result = restTemplate.getForObject(INVOKE_URL+"/payment/consul", String.class);System.out.println("消费者调用支付服务(consule)--->result:" + result);return result;}
}
(六)验证
五、三个注册中心异同点
(一)CAP理论
C:Consistency(强一致性)
A:Availability(可用性)
P:Partition tolerance(分区容错性)
CAP理论关注粒度是数据,而不是整体系统设计的策略
CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,
因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:
CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。
AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。
(二)AP架构
当网络分区出现后,为了保证可用性,系统B可以返回旧值,保证系统的可用性。
结论:违背了一致性C的要求,只满足可用性和分区容错,即AP
(三)CP架构
当网络分区出现后,为了保证一致性,就必须拒接请求,否则无法保证一致性
结论:违背了可用性A的要求,只满足一致性和分区容错,即CP
总结:
对于springcloud三个常用注册组件,其异同点大致如下:
![]()