Consul
Consul是一个Spring Cloud 中集成好的开源的分布式的服务注册发现中心。
由Go语言编写。支持健康检查,多数据中心还支持k-v存储,采用Raft一致性算法,保证强一致性,可用性。并且和docker完美兼容。
Consul本身也是一种服务治理中心,相对于Eureka而言:
- Consul牺牲了部分的性能,保证了服务的强一致性。
- Eureka只要服务注册到主节点,就认为服务注册成功,不关其他节点是否可以正常调用。
Consul vs Eureka vs Zookeeper
CAP原理分别指的是,数据一致性、数据可用性、分区耐受性 ,这里AP和CP分别指的是:
- AP模式: 牺牲强一致性,部分节点宕机,不会影响正常工作的节点。
- CP模式: 牺牲数据可用性,为了保证数据的一致性,当一台机器出现故障时,所有节点的数据都不能使用。
一致性算法,使一组服务器在一个值上达成一致,所以活跃的特征在于最终每个服务器都可以决定一个值。通过值的一致能够实现对同一个数据的请求会让同一个服务器来处理。Paxos和Raft都是通过选取master来实现多节点下值的一致性。
Consul的安装及启动
第一步:下载consul
根据自身的系统从官网选择合适的版本。我这里使用的是Mac,可以直接使用brew下载
同样使用Mac的小伙伴可以参考我的博客:使用Mac系统来进行Java编程
brew install consul
第二步:启动consul
./consul agent -dev -ui -client 0.0.0.0
启动命令各参数说明:
- agent:Consul的核心命令,主要作用有维护成员信息、运行状态检测、声明服务以及处理请求等
- -server:就是代表server模式
- -ui:代表开启web 控制台
- -bootstrap-expect:代表想要创建的集群数目,官方建议3或者5
- -data-dir:数据存储目录
- -node:代表当前node的名称
- -client:应该是一个客户端服务注册的地址,可以和当前server的一致也可以是其他主机地址,系统默认是127.0.0.1
- -bind:集群通讯地址
- -join:加入的集群地址
第三步:进入
http://localhost:8500/ui/dc1/services进入Consul UI界面
SpringCloud使用Consul作为服务治理中心
Maven依赖
- Consul对于SpringBoot和SpringCloud的版本有着一定的要求,所以这里展示实例demo相对完整的依赖。
org.springframework.boot
spring-boot-starter-parent
2.1.2.RELEASE
UTF-8
1.8
1.8
1.18.2
org.springframework.boot
spring-boot-starter-actuator
org.springframework.cloud
spring-cloud-starter-consul-discovery
org.springframework.boot
spring-boot-starter-web
org.projectlombok
lombok
${lombok-version}
true
org.springframework.cloud
spring-cloud-dependencies
Greenwich.SR4
pom
import
application.properties:配置类
server.port=8080
spring.application.name=springcloud-demo-producer
#consul
spring.cloud.consul.host=127.0.0.1
spring.cloud.consul.port=8500
#健康检查路径
spring.cloud.consul.discovery.health-check-path=/actuator/health
spring.cloud.consul.discovery.health-check-interval=15s
spring.cloud.consul.discovery.hostname=127.0.0.1
spring.cloud.consul.discovery.register=true
spring.cloud.consul.discovery.port=${server.port}
#consul service name
spring.cloud.consul.discovery.serviceName=springcloud-demo-producer
spring.cloud.consul.discovery.heartbeat.enabled=true
SpringCloudProducerApp:启动类
- @EnableDiscoveryClient:用于向consul或者zookeeper作为注册中心的时候提供注册服务
@Slf4j
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableDiscoveryClient
public class SpringCloudProducerApp extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SpringCloudProducerApp.class);
}
/**
* 项目的启动方法
*
* @param args
*/
public static void main(String[] args) {
SpringApplication.run(SpringCloudProducerApp.class, args);
log.info("======服务已经启动========");
}
}
验证
启动项目,进入
http://localhost:8500/ui/dc1/servicesConsul UI界面看到新注册的服务