Spring Cloud(Alibaba)女朋友看了都会的超详细保姆级笔记!看完还不会算我输!

Posted 是阿岚呐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Cloud(Alibaba)女朋友看了都会的超详细保姆级笔记!看完还不会算我输!相关的知识,希望对你有一定的参考价值。

1. 简介

为什么会出现?

SpringCloud Netflix进入维护模式,意味着不再向模块添加新的功能和组件

能干嘛?

服务降级限流、服务注册与发现、分布式配置管理、消息驱动能力、阿里云对象存储、分布式任务调度




2. Nacos服务注册配置中心

2.1 安装

介绍

Nacos是注册中心+配置中心的组合,即Nacos = Eurake + Config + Bus

下载

https://github.com/alibaba/nacos/releases/download/1.1.4/nacos-server-1.1.4.zip

解压,进入bin目录,双击sartup.cmd启动!访问 http://localhost:8848/nacos:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fp04jyFg-1619878400710)(E:\\学习笔记\\图片\\image-20210422162037895.png)]



2.2 Nacos服务注册中心

2.2.1 服务提供者注册

  1. 新建module:cloudalibaba-provider-payment9001

  2. POM

    • 父POM

    • 子POM

          <dependencies>
              <!--SpringCloud ailibaba nacos -->
              <dependency>
                  <groupId>com.alibaba.cloud</groupId>
                  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
              </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.springframework.boot</groupId>
                  <artifactId>spring-boot-devtools</artifactId>
                  <scope>runtime</scope>
                  <optional>true</optional>
              </dependency>
              <dependency>
                  <groupId>org.projectlombok</groupId>
                  <artifactId>lombok</artifactId>
                  <optional>true</optional>
              </dependency>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-test</artifactId>
                  <scope>test</scope>
              </dependency>
          </dependencies>
      
      
  3. YML

    server:
      port: 9001
    spring:
      application:
        name: nacos-payment-provider
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848 #配置Nacos地址
    management:
      endpoints:
        web:
          exposure:
            include: '*'
    
  4. 主启动

    @SpringBootApplication
    @EnableDiscoveryClient
    public class PaymentMain9001 {
        public static void main(String[] args) {
            SpringApplication.run(PaymentMain9001.class,args);
        }
    }
    
  5. 业务类

    @RestController
    public class PaymentController {
    
        @Value("${server.port}")
        private String serverPort;
    
        @GetMapping(value = "/payment/nacos/{id}")
        public String getPayment(@PathVariable("id") Integer id){
            return "nacos registry, serverPort: "+serverPort+"\\t id: " + id;
        }
    }
    
  6. 新建9002:效果如下:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QHQLOyu6-1619878400712)(E:\\学习笔记\\图片\\image-20210422171436190.png)]



2.2.2 消费者注册和负载

  1. 新建Module:cloudalibaba-consumer-nacos-order83

  2. POM

    <dependencies>
        <!--SpringCloud ailibaba nacos -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </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.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
  3. YML

    server:
      port: 83
    spring:
      application:
        name: nacos-order-consumer
    cloud:
      nacos:
        discovery:
          server-addr: localhost:8848
    #消费者将要去访问的微服务名称(注册成功进nacos,的微服务提供者)
    service-url:
      nacos-user-service: http://nacos-payment-provider
    
  4. 主启动类

    @EnableDiscoveryClient
    @SpringBootApplication
    public class PaymentMain9002 {
        public static void main(String[] args) {
            SpringApplication.run(PaymentMain9002.class,args);
        }
    }
    
  5. 业务类

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-03YjFn75-1619878400713)(E:\\学习笔记\\图片\\image-20210422215304790.png)]

    @Configuration
    public class ApplicationContextConfig {
        @Bean
        @LoadBalanced
        public RestTemplate getRestTemplete(){
            return new RestTemplate();
        }
    }
    
    @RestController@Slf4jpublic class OrderNacosController {    @Resource    private RestTemplate restTemplate;    @Value("${service-url.nacos-user-service}")    private String serverURL;    @GetMapping(value = "/consumer/payment/nacos/{id}")    public String paymentInfo(@PathVariable("id") Long id){        return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class);    }}
    
  6. 测试

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tV5Ke9Sg-1619878400715)(E:\\学习笔记\\图片\\image-20210422220100070.png)]

    http://localhost:83/consumer/payment/nacos/13 实现了负载均衡



2.2.3 服务注册中心对比

Nacos支持AP和CP的切换:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f84TMpKp-1619878400717)(E:\\学习笔记\\图片\\image-20210422222151921.png)]




2.3 Nacos配置中心

2.3.1 基础配置

  1. 新建module:cloudalibaba-config-nacos-client3377

  2. POM

     <dependencies>
         <!--nacos-config-->
         <dependency>
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
         </dependency>
         <!--SpringCloud ailibaba nacos -->
         <dependency>
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
         </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.springframework.boot</groupId>
             <artifactId>spring-boot-devtools</artifactId>
             <scope>runtime</scope>
             <optional>true</optional>
         </dependency>
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
             <optional>true</optional>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
    
  3. YML
    Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application

    • bootstrap

         #naco配置
         server:
           port: 3377
         spring:
           application:
             name: nacos-config-client
           cloud:
             nacos:
               discovery:
                 server-addr: localhost:8848 #Nacos服务注册中心地址
               config:
                 server-addr: localhost:8848 #Nacos作为配置中心地址
                 file-extension: yaml #指定yamL格式的配置
      
         #  $fspring.application.name}-${spring.profile.active]}.${spring.cLoud.nacos,config.file-extension}
      
    • application

         spring:
           profiles:
             active: dev #表示开发环境
      
  4. 主启动类

     @EnableDiscoveryClient
     @SpringBootApplication
     public class NacosConfigClientMain3377 {
         public static void main(String[] args) {
             SpringApplication.run(NacosConfigClientMain3377.class,args);
         }
     }
    
  5. 业务类

     @RestController
     @RefreshScope //支持nacos动态刷新
     public class ConfigClientController {
         @Value("${config.info}")
         private String configInfo;
    
         @GetMapping("/config/info")
         public String getConfigInfo(){
             return configInfo;
         }
     }
    
  6. 在NACOS中添加配置信息

    配置规则:Nacos中的dataid的组成格式及与SpringBoot配置文件中的匹配规则

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZaMKbfkE-1619878400718)(E:\\学习笔记\\图片\\image-20210423103517036.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qQRGSEkF-1619878400719)(E:\\学习笔记\\图片\\image-20210423104104866.png)]

  7. 自带动态刷新



2.3.2 分类配置

namespace、group、dataid三者关系

默认情况:
Namespace=public,Group=DEFAULT_GROUP,默认Cluster是DEFAULT
Nacos默认的命名空间是public,Namespace主要用来实现隔离。
比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。

Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去

Service就是微服务;一个Service可以包含多个Cluster(集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。比方说为了容灾,Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的Service微服务起一个集群名称(HZ),给广州机房的Service微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。

最后是Instance,就是微服务的实例。

DataId配置方案

  1. 指定spring.profile.active和配置文件的DatalD来使不同环境下读取不同的配置

  2. 默认空间+默认分组+新建dev和test两个dataid,通过spring.profile.active属性就能进行多环境下配置文件的读取,测试:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lN7BrRfj-1619878400720)(E:\\学习笔记\\图片\\image-20210423111348729.png)]
    想切换哪个环境就换成哪个环境

group分组方案

namespace空间方案

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Os8RrTYg-1619878400720)(E:\\学习笔记\\图片\\image-20210423112309433.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kxeJKVsm-1619878400721)(E:\\学习笔记\\图片\\image-20210423113026377.png)]



2.4 Nacos集群持久化配置

集群架构说明

  1. 默认Nacos使用嵌入式数据库实现数据的存储。所以,如果启动多个默认配置下的Nacos节点,数据存储是存在一致性问题的。为了解决这个问题,Nacos采用了集中式存储的方式来支持集群化部署,目前只支持MySQL的存储。

在这里插入图片描述

持久化切换配置

  1. Nacos默认自带的是嵌入式数据库derby

  2. derby到mysql切换配置步骤

    • nacos的conf目录下找到sql脚本:nacos-mysql.sql,在数据库中执行

    • nacos的conf目录下找到application.properties:在最后添加以下内容

       spring.datasource.platform=mysql
      
       db.num=1
       db.url.O=jdbc:mysql://127.0.0.1:3306/nacos_config?
       characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
       db.user=root
       db.password=admin
      
    • 最后进入nacos测试,发布配置文件,发现在数据库中有:

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iPajixcv-1619878400721)(E:\\学习笔记\\图片\\image-20210423154841287.png)]



2.5 Nacos的Linux安装

  1. 下载地址:https://github.com/alibaba/nacos/releases/download/1.4.1/nacos-server-1.4.1.tar.gz(1.4.1版本)
  2. 在opt目录中解压即可


2.6 集群配置(上)

  1. 在Linux上Mysql数据库配置,跟在windows上一致,需要新建nacos_config库并生成表

  2. application.properties配置,跟windows上一致

  3. Linux服务器上nacos集群配置cluster.conf

    • 梳理出三台不同nacos集群的服务端口号:3333、4444、5555(cluster.conf)

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rm8CD0TS-1619878400722)(E:\\学习笔记\\图片\\image-20210423214434983.png)]

  4. 编辑nacos的启动脚本startup.sh,使他能够接受不同的启动端口:

    在这里插入图片描述



2.7 集群配置(下)

测试:启动3333、4444、5555,启动nginx,测试网址:http://192.168.200.130:1111/nacos/#/login,登录密码均为nacos

一定要注意如果访问失败很有可能是端口号没有打开!!!

新建一条配置测试:

微服务cloudalibaba-provider-payment9002注册进nacos集群:

修改配置文件:

    server:
      port: 9002
    spring:
      application:
        name: nacos-payment-provider
      cloud:
        nacos:
          discovery:
            #server-addr: localhost:8848 #配置Nacos地址
            #换成nginx的1111端口,做集群
            server-addr: 192.168.200.130:1111
    management:
      endpoints:
        web:
          exposure:
            include: '*'

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xiGKEXl3-1619878400724)(E:\\学习笔记\\图片\\image-20210424150051254.png)]




3. Sentinel熔断与限流

3.1 简介

是什么

​ 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel以流量为切入点,从流量控
制、熔断降级、系统负载保护等多个维度保护服务的稳定性。一句话,优化版的Hystrix。

特征

  1. 丰富的应用场景:Sentinel承接了阿里巴巴近10年的双十一大促流量的核心场景,例如秒杀(即突
    发流量控制在系统容量可以承受的范围)、裆息削峰填谷、集群流量控制、实时熔断下游不可用应
    用等。
  2. 完备的实时监控:Sentinel同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器
    秒级数据,甚至500台以下规模的集群的汇总运行情况。
  3. 广泛的开源生态:Sentinel提供开箱即用的与其它开源框架/库的整合模块,例如与Spring Cloud.
    Dubbo、gRPC的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入Sentinel,
    完善的SPI扩展点: Sentinel提供简单易用、完善的SPI扩展接口。您可以通过实现扩展接口来快
    速地定制逻辑。例如定制规则管理、适配动态数据源等。



3.2 下载运行

  1. 下载地址:https://github.com/alibaba/Sentinel/releases/download/1.7.0/sentinel-dashboard-1.7.0.jar

  2. sentinel分为两部分:

    • 核心库(Java客户端)不依赖任何框架/库,能够运行于所有Java运行时环境,同时对Dubbo /
      Spring Cloud等框架也有较好的支持。
    • 控制台(Dashboard)基于Spring Boot开发,打包后可以直接运行,不需要额外的Tomcat等应用
      容器。
  3. 安装:

    • 在目录下命令行中输入:java -jar .\\sentinel-dashboard-1.7.0.jar

    • 输入localhost:8080,进入sentinel页面,用户名密码均为sentinel

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EZ7vXc4R-1619878400724)(E:\\学习笔记\\图片\\image-20210424153940600.png)]



3.3 Sentinel初始化监控

新建一个Module:cloudalibaba-sentinel-service8401

  1. POM

     <dependencies>
         <!-- alibaba sentinel -->
         <dependency>
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-alibaba-sentinel</artifactId>
         </dependency>
    
         <!-- sentinel-datasource-nacos 后续做持久化用到-->
         <dependency>
             <groupId>com.alibaba.csp</groupId>
             <artifactId>sentinel-datasource-nacos</artifactId>
         </dependency>
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-openfeign</artifactId>
         </dependency>
         <!--SpringCloud ailibaba nacos -->
         <dependency>
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             今天来看看阿里巴巴的新一代微服务解决方案 Spring Cloud Alibaba

    Spring Boot,Spring Cloud,Spring Cloud Alibaba 版本选择说明以及整理归纳

    一套完整的Spring Cloud Alibaba视频教程(非广告)

    Spring Cloud Alibaba Nacos 使用详解

    基于Spring Cloud Alibaba + mybatis 分布式微服务高并发架构 数据平台化(中台)思想+多租户saas企业开发架构技术选型和设计方案

    基于Spring Cloud Alibaba 前后端分离架构分布式微服务高并发架构 数据平台化(中台)思想+多租户saas企业开发架构技术选型和设计方案