• 【微服务】- Consul整合SpringCloud及使用


    简介

    Consul是-套开源的分布式服务发现和配置管理系统,由HashiCorp公司用Go语言开发。

    提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要 单独使用,也可以一起使用以构建全方位的服务网格,总之Consul提供了一种完整的服务网格解决方案。

    它具有很多优点。包括:基于raft协议,比较简洁;支持健康检查, 同时支持HTTP和DNS协议支持跨数据中心的WAN集群提供图形界面跨平台,支持Linux、Mac、 Windows

    功能

    服务发现

    提供HTTP和DNS两种发现方式。

    健康监测

    支持多种方式,HTTP、TCP、 Docker、Shell脚本定制

    KV存储

    Key、Value的存储方式

    多数据中心

    Consul支持多数据中心

    可视化Web界面

    图片

    consul安装与使用

    直接在官网下载

    https://www.consul.io/downloads.html

    使用

    下载完后直接解压得到一个exe文件

    图片

    在这个位置打开cmd运行

    图片

    consul占用的端口号是8500

    启动consul后访问8500端口就可以图片

    完成。

    Consul实现注册功能

    我提供的项目仅仅是搭了一个框架具体的实现,可以有具体的项目写。

    注册provider提供者的服务

    建项目

    cloud-provider-consul-payment8085

    写pom

    <dependencies>
        <dependency>
            <groupId>wf.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <!--   引入consul客户端     -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>
    
    </dependencies>
    

    写yml

    server:
      port: 8085
    
    # 服务别名---zookeeper注册中心名称
    spring:
      application:
        name: consul-provider-payment
      cloud:
        consul:
          host: localhost
          port: 8500
          discovery:
            service-name: ${spring.application.name}
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/cloud?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
        username: root
        password: 123456
    

    主启动

    @SpringBootApplication
    @EnableDiscoveryClient
    public class PaumentConsulMain8085 {
    
        public static void main(String[] args) {
            SpringApplication.run(PaumentConsulMain8085.class,args);
        }
    }
    

    controller

    @RestController
    @Slf4j
    public class PaymentController {
        @Value("${server.port}")
        private String serverPort;
    
        @RequestMapping(value = "/payment/consul")
        public String paymentzk(){
            return "springcloud with consul: " + serverPort + "	" + UUID.randomUUID().toString();
        }
    }
    

    写consumer消费者服务

    建项目

    cloud-consumer-consul-order80

    写pom

    同provider的pom

    写yml

    server:
      port: 80
    
    # 服务别名---zookeeper注册中心名称
    spring:
      application:
        name: consul-consumer-payment
      cloud:
        consul:
          host: localhost
          port: 8500
          discovery:
            service-name: ${spring.application.name}
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/cloud?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
        username: root
        password: 123456
    

    主启动

    @SpringBootApplication
    @EnableDiscoveryClient
    public class OrderMain80 {
    
        public static void main(String[] args) {
            SpringApplication.run(OrderMain80.class,args);
        }
    }
    

    配置类

    @Configuration
    public class ApplicationContextConfig {
    
        @Bean
        @LoadBalanced
        public RestTemplate getTemplate(){
            return new RestTemplate();
        }
    }
    

    controller

    @RestController
    @Slf4j
    public class OrderController {
    
    
        private static final String INVOKE_URL = "http://consul-provider-payment";
    
        @Resource
        private RestTemplate restTemplate;
    
        @GetMapping(value = "/consumer/payment/consul")
        public String paymentInfo(){
            String result = restTemplate.getForObject(INVOKE_URL + "/payment/consul", String.class);
            return result;
        }
    
    }
    

    启动上面两个服务,测试

    图片

    图片图片

    成功

    Eureka、Zookeeper和Consul三个注册中心的异同点

    之前我已经写过Eurekahttps://blog.csdn.net/gyhdxwang/article/details/105235899和Zookeeperhttps://blog.csdn.net/gyhdxwang/article/details/105261615现在我们俩看看这三个注册中心的异同

    图片

    图片

    cpa是什么

    • C:Consistency (强一 致性)
    • A:Availability (可用性)
    • P:Partition tolerance (分区容错性)

    CAP理论关注粒度是数据,而不是整体系统设计的策略。

    最多只能同时较好的满足两个。一个系统必须保证P即分区容错性

    CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性, 可用性和分区容错性这三个需求,

    因此,根据CAP原理将NoSQL数据库分成了满足CA原则、满足CP原则和满足AP原则三大类:

    • CA-单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
    • CP-满足一致性,分区容忍必的系统,通常性能不是特别高。
    • AP -满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。

    AP架构

    当网络分区出现后,为了保证可用性,系统B可以返回旧值,保证系统的可用性。

    结论:违背了一致性C的要求,只满足可用性和分区容错,即AP

    图片

    CP架构

    当网络分区出现后,为了保证工一致性,就必须拒接请求,否则无法保证一致性

    结论:违背了可用性A的要求,只满足一致性和分区容错, 即CP

    图片

  • 相关阅读:
    JVM Specification 9th Edition (1) Cover
    《数据库设计入门经典》读书笔记——第一章:数据库建模的过去与现在
    Fly (From Wikipedia)
    centos 6.5 安装mysql 5.7.21 community
    数据库设计(七)第三范式(3NF)
    记录一次OOM排查经历(一)
    jpa中时间戳格式应该用哪种类型
    mybatis generator如何定制JavaTypeResolver,使smallint类型的数据库字段在po中的类型为Integer?
    jenkins部署war包到远程服务器的tomcat
    Jenkins踩坑系列--你试过linux主机ssh登录windows,启动java进程吗,来试试吧
  • 原文地址:https://www.cnblogs.com/wf614/p/12919799.html
Copyright © 2020-2023  润新知