Consul服务注册与发现
1. Consul简介
Consul是HashiCorp公司推出的开源工具,Consul由Go语言开发,部署起来非常容易,只需要极少的可执行程序和配置文件,具有绿色、轻量级的特点。Consul是分布式的、高可用的、 可横向扩展的用于实现分布式系统的服务发现与配置。
-
服务发现(Service Discovery):Consul提供了通过DNS或者HTTP接口的方式来注册服务和发现服务。一些外部的服务通过Consul很容易的找到它所依赖的服务。
-
健康检查(Health Checking):Consul的Client可以提供任意数量的健康检查,既可以与给定的服务相关联(“webserver是否返回200 OK”),也可以与本地节点相关联(“内存利用率是否低于90%”)。操作员可以使用这些信息来监视集群的健康状况,服务发现组件可以使用这些信息将流量从不健康的主机路由出去。
-
Key/Value存储:应用程序可以根据自己的需要使用Consul提供的Key/Value存储。 Consul提供了简单易用的HTTP接口,结合其他工具可以实现动态配置、功能标记、领袖选举等等功能。
-
安全服务通信:Consul可以为服务生成和分发TLS证书,以建立相互的TLS连接。意图可用于定义允许哪些服务通信。服务分割可以很容易地进行管理,其目的是可以实时更改的,而不是使用复杂的网络拓扑和静态防火墙规则。
-
多数据中心:Consul支持开箱即用的多数据中心. 这意味着用户不需要担心需要建立额外的抽象层让业务扩展到多个区域。
consul官网:What is Consul? | Consul | HashiCorp Developer,consul有可视化web界面 consul安装于Linux系统。 中文网的consul:Spring Cloud Consul 中文文档 参考手册 中文版
2. Consul安装
官网:Deploy Consul on VMs | Consul | HashiCorp Developer
-
下载下来双击consul.exe文件
-
使用开发模式启动:
1.consul agent -dev 2.访问http://192.168.25.153:8500
3. 服务提供者
-
创建cloud-providerconsul-payment8006项目
-
pom文件
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
-
application.yaml
server:
port: 8006
spring:
application:
name: consul-provider-payment
cloud:
consul:
discovery:
#注册中心上的服务名称
service-name: ${spring.application.name}
#注册中心上的ip和端口
host: 192.168.25.153
port: 8500
-
主启动类
@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain8006 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8006.class,args);
}
}
-
controller层
@RestController
@Slf4j
public class PaymentController {
@Value("${server.port}")
private String serverPort;
@RequestMapping(value = "/payment/consul")
public String paymentConsul(){
return "spring cloud with consul:"+serverPort+"\t"+ UUID.randomUUID().toString();
}
}
测试:
上面那个爆红出错是因为去掉了spring-boot-starter-actuator包,加上测试通过。
4. 服务消费者
-
创建服务消费者cloud-consumerconsul-order80
-
pom文件跟cloud-providerconsul-payment8006一样
-
yaml文件跟cloud-providersonsul-payment8006一样,除端口
-
主启动类也是,除类名,其他一样。
-
config和controller有cloud-consumerzk-order80基本一样
测试:
5. 三个注册中心异同点
-
Consistency(一致性)
-
Availability(可用性)
-
Partition tolerance(分区容忍性)
CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性、可用性和分区容错性这三个需求,因此,根据CAP理论原理将NoSQL数据库分成了满足CA原则、满足CP原则和满足AP原则的三大类:
-
CA:单点集群,满足一致性、可用性的系统,通常在可扩展性上不太强大
-
CP:满足一致性、分区容忍性的系统,通常性能不是特别高
-
AP:满足可用性、分区容忍性的系统,通常对一致性要求低一些
组件名 | 语言 | CAP | 服务健康检查 | 对外暴露接口 | SPRING CLOUD集成 |
---|---|---|---|---|---|
Eureka | Java | AP | 可配支持 | HTTP | 已集成 |
Zookeeper | Java | CP | 支持 | 客户端 | 已集成 |
Consul | Go | CP | 支持 | HTTP/DNS | 已集成 |