目录
CAP
C:Consistency(强一致性)
A:Availability(可用性)
P:Partition tolerance(分区容错)
CAP理论关注粒度是数据,而不是整体系统设计的策略
AP(Eureka)
CP(Zookeeper/Consul)
Consul简介
1.官网地址:https://www.consul.io/intro/index.html
2.Spring Cloud Consul特性:
3.consul 下载:https://www.consul.io/downloads.html
4.中文开发文档:https://www.springcloud.cc/spring-cloud-consul.html
安装并运行Consul
官网安装说明:https://learn.hashicorp.com/consul/getting-started/install.html
下载完成后只有一个consul.exe文件,硬盘路径下双击运行,查看版本信息
consul --version
使用开发模式启动
consul agent -dev
通过以下地址可以访问Consul的首页:http://localhost:8500
服务提供者
1.新建服务提供者cloud-provider-consul-payment8006。
2.pom复制8004。(用下面的依赖替换Zookeeper的依赖)
<!--SpringCloud consul-server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
3.写yml
server:
port: 8006
spring:
application:
name: consul-provider-payment
cloud:
consul:
host: localhost #在linux的填linux的ip地址
port: 8500
discovery:
service-name: ${spring.application.name}
4.主启动 (与8004相同)
@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain8006 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8006.class,args);
}
}
5.controller
@RestController
@Slf4j
public class PaymentController {
@Value("${server.port}") //获取端口号
private String serverPort;
@RequestMapping("/payment/consul")
public String paymentConsul(){
return "springcloud with zookeeper:" + serverPort + "\t" + UUID.randomUUID().toString();
}
}
6.验证测试
启动项目 浏览器输入:http://localhost:8500/ui/dc1/services
localhost:8006/payment/consul 每次输出的流水id也不同
consul 也有实例 因为是单机版 所以列表只有一个 里面可以看到具体状态
服务消费者
1.新建模块cloud-consumer-consul-order80
2.改POM (与8006相同)
3.写yml(端口号为80,name改为consul-consumer-order,其他和8006相同)
4.主启动类(与8006相同)
5.config(和zk的消费者相同)
6.controller.OrderConsulController
@RestController
@Slf4j
public class OrderConsulController {
public static final String INVOME_URL = "http://consul-provider-payment";
@Resource
private RestTemplate restTemplate;
@GetMapping("/consumer/payment/consul")
public String payment (){
String result = restTemplate.getForObject(INVOME_URL+"/payment/consul",String.class);
return result;
}
}
7.验证测试
启动order80 浏览器输入:http://localhost:8500/ui/dc1/services
访问测试地址:http://localhost/consumer/payment/consul
没有输入80端口也可也访问到8006