SpringCloud~~~【Consul】
Consul简介
https://www.consul.io/intro/index.html
分布式的服务发现和配置管理系统,go语言开发的。
提供了微服务系统中的服务治理、配置中心、控制总线等功能。
优点:基于raft协议,比较简洁;支持健康检查,同时支持HTTP和DNS协议,支持数据中心的WAN集群,提供图形界面,跨平台。
下载地址:https://www.consul.io/downloads
中文地址:https://www.springcloud.cc/spring-cloud-consul.html
下载之后将consul二进制文件拷贝到/usr/local/bin目录下,我的是mac
双击consul
看到如下信息表示成功:
Available commands are:
acl Interact with Consul's ACLs
agent Runs a Consul agent
catalog Interact with the catalog
config Interact with Consul's Centralized Configurations
connect Interact with Consul Connect
debug Records a debugging archive for operators
event Fire a new event
exec Executes a command on Consul nodes
force-leave Forces a member of the cluster to enter the "left" state
info Provides debugging information for operators.
intention Interact with Connect service intentions
join Tell Consul agent to join cluster
keygen Generates a new encryption key
keyring Manages gossip layer encryption keys
kv Interact with the key-value store
leave Gracefully leaves the Consul cluster and shuts down
lock Execute a command holding a lock
login Login to Consul using an auth method
logout Destroy a Consul token created with login
maint Controls node or service maintenance mode
members Lists the members of a Consul cluster
monitor Stream logs from a Consul agent
operator Provides cluster-level tools for Consul operators
reload Triggers the agent to reload configuration files
rtt Estimates network round trip time between nodes
services Interact with services
snapshot Saves, restores and inspects snapshots of Consul server state
tls Builtin helpers for creating CAs and certificates
validate Validate config files/directories
version Prints the Consul version
watch Watch for changes in Consul
打开另一个终端:输入
consul agent -dev
成功后访问localhost:8500
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-flh5Umqb-1607913579026)(en-resource://database/2230:1)]
OK啦~很简单。
搭建微服务提供者
cloud-providerconsul-payment8006
application.yaml
###consul服务端口号
server:
port: 8006
spring:
application:
name: consul-provider-payment
####consul注册中心地址
cloud:
consul:
host: localhost
port: 8500
discovery:
#hostname: 127.0.0.1
service-name: ${spring.application.name}
controller层:
@RestController
@Slf4j
public class PaymentController {
@Value("${server.port}")
private String serverPort;
@RequestMapping(value = "/payment/consul")
public String paymentconsul(){
return "springcloud with consul:" + serverPort + "\t" + UUID.randomUUID().toString();
}
}
启动类:
@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain8006 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8006.class,args);
}
}
启动可以看到服务注册进consul
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-32S9jVqH-1607913579028)(en-resource://database/2232:1)]
访问localhost:8006/payment/consul
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dzjb5LK0-1607913579032)(en-resource://database/2234:1)]
搭建微服务消费者和zookeeper一样~
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U1f4gCpp-1607913579036)(en-resource://database/2235:1)]
###consul服务端口号
server:
port: 80
spring:
application:
name: cloud-consumer-order
####consul注册中心地址
cloud:
consul:
host: localhost
port: 8500
discovery:
#hostname: 127.0.0.1
service-name: ${spring.application.name}
三个注册中心的异同点
组件名 | 语言 | CAP | 服务健康检查 | 对外暴露接口 | Spring Cloud集成 |
---|---|---|---|---|---|
Eureka | Java | AP | 可配支持 | HTTP | 已集成 |
Consul | GO | CP | 支持 | HTTP/DNS | 已集成 |
Zookeeper | Java | CP | 支持 | 客户端 | 已集成 |
CAP
C:Consistency(强一致性)
A:Availability(可用性)
P:Partition tolerance(分区容错性)
CAP理论关注粒度是数据
CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,因此,根据CAP原理将NoSQL数据库分成了满足CA原则、满足CP原则和满足AP原则三大类:
CA:单点集群,满足一致性,可用性的系统,通常可扩展性上不太强大。
CP:满足一致性,分区容错性的系统,通常性能不是特别高。
AP:满足可用性,分区容错性的系统,通常可能对一致性要求低一些。