龙空技术网

SpringCloud使用Consul作为服务治理中心

妖精的杂七杂八 144

前言:

眼前我们对“consul健康检查 acturator”可能比较关心,各位老铁们都需要了解一些“consul健康检查 acturator”的相关知识。那么小编也在网上网罗了一些有关“consul健康检查 acturator””的相关文章,希望大家能喜欢,大家一起来学习一下吧!

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:加入的集群地址

第三步:进入进入Consul UI界面

SpringCloud使用Consul作为服务治理中心

Maven依赖

Consul对于SpringBoot和SpringCloud的版本有着一定的要求,所以这里展示实例demo相对完整的依赖。

<parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-parent</artifactId>    <version>2.1.2.RELEASE</version></parent><properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>    <maven.compiler.source>1.8</maven.compiler.source>    <maven.compiler.target>1.8</maven.compiler.target>    <lombok-version>1.18.2</lombok-version></properties><dependencies><!--actuator用于检查节点健康--><dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-actuator</artifactId></dependency><!--Spring Cloud Consul--><dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-starter-consul-discovery</artifactId></dependency><!--spring boot--><dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-web</artifactId></dependency><!--lombok--><dependency>    <groupId>org.projectlombok</groupId>    <artifactId>lombok</artifactId>    <version>${lombok-version}</version>    <optional>true</optional></dependency></dependencies><!--加入Spring Cloud 的Dalston版本的配置依赖--><dependencyManagement>    <dependencies>        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-dependencies</artifactId>            <version>Greenwich.SR4</version>            <type>pom</type>            <scope>import</scope>        </dependency>    </dependencies></dependencyManagement>

application.properties:配置类

server.port=8080spring.application.name=springcloud-demo-producer#consulspring.cloud.consul.host=127.0.0.1spring.cloud.consul.port=8500#健康检查路径spring.cloud.consul.discovery.health-check-path=/actuator/healthspring.cloud.consul.discovery.health-check-interval=15sspring.cloud.consul.discovery.hostname=127.0.0.1spring.cloud.consul.discovery.register=truespring.cloud.consul.discovery.port=${server.port}#consul service namespring.cloud.consul.discovery.serviceName=springcloud-demo-producerspring.cloud.consul.discovery.heartbeat.enabled=true

SpringCloudProducerApp:启动类

@EnableDiscoveryClient:用于向consul或者zookeeper作为注册中心的时候提供注册服务

@Slf4j@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})@EnableDiscoveryClientpublic 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("======服务已经启动========");    }}
验证

启动项目,进入 UI界面看到新注册的服务

标签: #consul健康检查 acturator