• Spring Cloud Alibaba 学习笔记


    官方地址:https://spring.io/projects/spring-cloud-alibaba
    github:https://github.com/alibaba/spring-cloud-alibaba/blob/2.2.x/README-zh.md

    一、概述

     * Spring Cloud alibaba为分布式应用开发提供一站式解决方案。它包含开发分布式应用程序所需的所有组件,使您可以轻松地使用Spring Cloud开发应用程序。
     * 有了Spring Cloud Alibaba,您只需要添加一些注释和少量配置,就可以将Spring Cloud的应用程序连接到阿里巴巴的分布式解决方案上,并利用阿里巴巴的中间件构建分布式应用系统。
    

    主要功能

    * 服务限流降级:默认支持 WebServletWebFlux, OpenFeignRestTemplateSpring Cloud Gateway, Zuul, DubboRocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
    * 服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。
    * 分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。
    * 消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。
    * 分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。
    * 阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
    * 分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。
    * 阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。
    

    区分

    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

    二、创建阿里巴巴环境

    在这里插入图片描述

    1、创建空项目

    输入名称:springCloudAlibaba
    选择路径: E:\Java

    在这里插入图片描述

    2、创建父类

    操作:选中空项目springCloudAlibaba->点击右键,选择 new-> module
    名称:springcloudalibaba_parent

    在这里插入图片描述

    3、pom引入依赖

      
        <parent>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-parentartifactId>
            <version>2.2.5.RELEASEversion>
        parent>
        
        <properties>
            <spring.cloud.version>Hoxton.SR6spring.cloud.version>
            <spring.cloud.alibaba.version>2.2.1.RELEASEspring.cloud.alibaba.version>
        properties>
        
        <dependencyManagement>
            <dependencies>
                
                <dependency>
                    <groupId>org.springframework.cloudgroupId>
                    <artifactId>spring-cloud-dependenciesartifactId>
                    <version>${spring.cloud.version}version>
                    <type>pomtype>
                    <scope>importscope>
                dependency>
                
                <dependency>
                    <groupId>com.alibaba.cloudgroupId>
                    <artifactId>spring-cloud-alibaba-dependenciesartifactId>
                    <version>${spring.cloud.alibaba.version}version>
                    <type>pomtype>
                    <scope>importscope>
                dependency>
            dependencies>
        dependencyManagement>
    

    三、Nacos简介和下载

    1、Nacos是什么

    一个更易于构建云原生应用的动态服务发现、配置管理和 服务管理平台。

    2、Nacos能干嘛

    • 替代Eureka做服务注册中心
    • 替代Config做服务配置中心

    3、 安装Nacos

    网址管理

    github仓库地址:https://github.com/alibaba/nacos
    nacos版本下载地址:https://github.com/alibaba/nacos/releases
    文档:https://nacos.io/zh-cn/
    手册:https://nacos.io/zh-cn/docs/what-is-nacos.html
    安装nacos 博客教程:码农快乐盒的SpringCloudAlibaba-Nacos 2.2.1最新版教程

    docker安装,待完善

    1. win版Docker安装centos7

    1. windows安装

    安装nacos 博客教程:码农快乐盒的SpringCloudAlibaba-Nacos 2.2.1最新版教程

    2. liunx安装

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    3. 访问Nacos

    路径:http://localhost:8848/nacos/
    用户名 :nacos 密码:nacos

    在这里插入图片描述

    4、 启动Nacos

    win单机 启动:startup.cmd -m standalone
    win集群 启动: 双击nacos\bin\startup.cmd
    liunx 单机启动:sh startup.sh -m standalone
    liunx 集群启动:sh startup.sh

    四、Nacos Client 开发

    1、创建nacosclient Module

    操作:右键springcloudalibaba_parent->new->module
    名称:springbootalibaba_01nacosclient
    在这里插入图片描述
    pom.xml依赖

        <dependencies>
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
            
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
            dependency>
        dependencies>
    

    application.yml 配置

    server:
      port: 8989
    spring:
      application:
        name: NACOSCLIENT # 微服务服务名,唯一 推荐大写
      cloud:
        nacos:
          server-addr: 127.0.0.1:8848  #nacos server 总地址
          discovery: # 发现
            server-addr: ${spring.cloud.nacos.server-addr} # 指定nacos client注册地址。默认是server地址,可写可不写
            service:  ${spring.application.name} # 指定nacos服务名。 默认是spring.application.name 地址可写可不写,如果写,以这个为主,建议不写
    
    
    
    
    
    

    启动文件
    路径:springbootalibaba_01nacosclient\src\main\java\com\xxx\NacosClientApplication.java

    package com.xxx;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    @SpringBootApplication
    @EnableDiscoveryClient //开始服务注册 这个注解可以省略不写
    public class NacosClientApplication {
        public static void main(String[] args) {
            SpringApplication.run(NacosClientApplication.class, args);
        }
    }
    
    
    

    2、nacos细节和服务间的通信

    1. 细节

    指定nacos client注册地址:默认 ${spring.cloud.nacos.server-addr} 可不写
    指定nacos服务名:默认 ${spring.application.name}可不写

    server:
      port: 8989
    spring:
      application:
        name: NACOSCLIENT # 微服务服务名,唯一 推荐大写
      cloud:
        nacos:
          server-addr: 127.0.0.1:8848  #nacos server 总地址
          discovery: # 发现
            server-addr: ${spring.cloud.nacos.server-addr} # 指定nacos client注册地址。默认是server地址,可写可不写
            service:  ${spring.application.name} # 指定nacos服务名。 默认是spring.application.name 地址可写可不写,如果写,以这个为主,建议不写
    

    2. 通信

    1. 创建user module

    名称:springcloudalibaba_02users

    在这里插入图片描述
    pom.xml 引入依赖

     <dependencies>
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
            
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
            dependency>
        dependencies>
    

    配置文件

    server:
      port: 8989
    spring:
      application:
        name: USERS
      cloud:
        nacos:
          server-addr: 127.0.0.1:8848
    

    启动文件

    package com.xxx;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class UsersApplication {
        public static void main(String[] args) {
            SpringApplication.run(UsersApplication.class, args);
        }
    }
    
    

    启动后查看nacos
    在这里插入图片描述
    创建UserController

    package com.xxx.controller;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class UserController {
        private static final Logger log = LoggerFactory.getLogger(UserController.class);
    
        @GetMapping("/invoke")
        public String invokeProduct() {
            log.info("用户服务。。。。");
            return "调用用户服务成功!!!";
    
        }
    }
    
    

    访问:http://127.0.0.1:8989/invoke
    在这里插入图片描述

    2. 创建product module

    名称:springcloudalibaba_03products

    在这里插入图片描述
    pom.xml 引入依赖

     <dependencies>
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
            
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
            dependency>
        dependencies>
    
    server:
      port: 9090
    spring:
      application:
        name: PRODUCTS
      cloud:
        nacos:
          server-addr: 127.0.0.1:8848
    

    启动文件

    package com.xxx;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class ProductApplication {
        public static void main(String[] args) {
            SpringApplication.run(ProductApplication.class, args);
        }
    }
    
    

    启动后查看nacos
    在这里插入图片描述
    创建ProductController

    package com.xxx.controller;
    
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class ProductController {
        private static final Logger log = LoggerFactory.getLogger(ProductController.class);
    
        @Value("${server.port}")
        private int port;
    
        @GetMapping("/product")
        public String product(Integer id) {
            log.info("id:{}", id);
            return "商品服务返回:" + id + " ,当前提供服务的端口号为:" + port;
    
        }
    }
    
    

    访问:http://127.0.0.1:9090/product?id=21
    在这里插入图片描述

    3. 用户调用商品服务

    user module 里面的pom引入openfign

        <dependencies>
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
            
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
            dependency>
            
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-starter-openfeignartifactId>
            dependency>
        dependencies>
    

    user module UsersApplication 启动类添加开启注解

    package com.xxx;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.openfeign.EnableFeignClients;
    
    @SpringBootApplication
    @EnableFeignClients
    public class UsersApplication {
        public static void main(String[] args) {
            SpringApplication.run(UsersApplication.class, args);
        }
    }
    
    

    user module 添加FeignClient配置类

    package com.xxx.feignClients;
    
    import org.springframework.cloud.openfeign.FeignClient;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    
    @FeignClient("PRODUCTS")
    public interface ProductClient {
        @GetMapping("/product")
        String product(@RequestParam("id") Integer id);
    }
    
    

    user module UserController 调用FeignClient配置类

    package com.xxx.controller;
    
    import com.xxx.feignClients.ProductClient;
    import oracle.jrockit.jfr.openmbean.ProducerDescriptorType;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class UserController {
        private static final Logger log = LoggerFactory.getLogger(UserController.class);
        @Autowired
        private ProductClient productClient;
    
    
        @GetMapping("/invoke")
        public String invokeProduct() {
            log.info("用户服务。。。。");
            //调用商品服务
            String result = productClient.product(1);
            return result;
    
        }
    }
    
    

    访问:http://127.0.0.1:8989/invoke
    在这里插入图片描述

    3. 统一配置中心使用及config client 开发及自动配置刷新

    1. 创建 config client module

    名称:springcloudalibaba_04configclient
    在这里插入图片描述
    pom 引入依赖

      <dependencies>
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
            
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
            dependency>
        dependencies>
    
    

    创建配置文件:src/main/resources/application.yml

    server:
      port: 8888
    spring:
      application:
        name: CONFIGCLIENT
      cloud:
        nacos:
          server-addr: 127.0.0.1:8848 # client 地址
    
    

    创建启动文件:src/main/java/com/xxx/ConfigClientApplication.java

    package com.xxx;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class ConfigClientApplication {
        public static void main(String[] args) {
            SpringApplication.run(ConfigClientApplication.class, args);
        }
    }
    
    

    创建controller :src/main/java/com/xxx/controller/DemoController.java

    package com.xxx.controller;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class DemoController {
        private static final Logger log = LoggerFactory.getLogger(DemoController.class);
    
    
        @GetMapping("/demo")
        public String demo() {
            log.info("demo ok  !!!");
            return "demo ok  !!!";
    
        }
    }
    
    

    访问:http://localhost:8888/demo 成功
    在这里插入图片描述

    配置文件配置userName:src/main/resources/application.yml

    server:
      port: 8888
    spring:
      application:
        name: CONFIGCLIENT
      cloud:
        nacos:
          server-addr: 127.0.0.1:8848 # client 地址
    
    userName: xiaochen
    
    

    DemoController 注入userName:src/main/java/com/xxx/controller/DemoController.java

    package com.xxx.controller;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class DemoController {
        private static final Logger log = LoggerFactory.getLogger(DemoController.class);
    
        @Value("${userName}")
        private String userName;
    
        @GetMapping("/demo")
        public String demo() {
            log.info("demo ok  !!!");
            return "demo ok  !!! userName:" + userName;
    
        }
    }
    
    

    访问:http://localhost:8888/demo

    发现当前取得是自己计算的登录的名称。不会取配置文件里面的值

    在这里插入图片描述
    修改配置文件配置userName:src/main/resources/application.yml

    给userName加前缀

    server:
      port: 8888
    spring:
      application:
        name: CONFIGCLIENT
      cloud:
        nacos:
          server-addr: 127.0.0.1:8848 # client 地址
    
    customer:
      userName: xiaochen
    
    

    修改DemoController 注入userName:src/main/java/com/xxx/controller/DemoController.java

    package com.xxx.controller;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class DemoController {
        private static final Logger log = LoggerFactory.getLogger(DemoController.class);
    
        @Value("${customer.userName}")
        private String userName;
    
        @GetMapping("/demo")
        public String demo() {
            log.info("demo ok  !!!");
            return "demo ok  !!! userName:" + userName;
    
        }
    }
    
    

    访问:http://localhost:8888/demo
    在这里插入图片描述

    2. nocas页面添加配置

    访问:http://localhost:8848/
    操作:配置管理->配置列表->+
    在这里插入图片描述
    配置信息,点击右下角发布

    在这里插入图片描述
    成功后自动跳转到配置列表
    在这里插入图片描述

    3. 实现自动化配置
    1. 引入nacos config client依赖:springcloudalibaba_04configclient\pom.xml
    
            
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
            dependency>
     
    
    
    1. 配置文件配置说明

    application:直接拉取配置<拉取了文件,直接使用,检测到有文件就使用>
    bootstrap:预先拉取<先拉取完成后,在使用,完全拉去完成后在使用>
    在这里插入图片描述

    在这里插入图片描述
    3. 删除application.yml ,添加bootstrap.yml文件
    删除application.yml ,创建:springcloudalibaba_04configclient\src\main\resources\bootstrap.yml

    spring:
      cloud:
        nacos:
          config:
            server-addr: 127.0.0.1:8848  # config server地址
            group: DEFAULT_GROUP    # 哪个组进行配置获取
            name: configclient-prod  # 文件名称
            file-extension: yml  #文件扩展名
    
    
    
    
    1. 配置文件比对
      在这里插入图片描述
    2. 配置自动刷新:src/main/java/com/xxx/controller/DemoController.java

    @RefreshScope //允许配置修改自动刷新

    • 不配置注解:页面修改后需要重启后才能更新。
    • 配置注解:页面修改后自动刷新。
    package com.xxx.controller;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.cloud.context.config.annotation.RefreshScope;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RefreshScope //允许短短配置修改自动刷新
    public class DemoController {
        private static final Logger log = LoggerFactory.getLogger(DemoController.class);
    
        @Value("${customer.userName}")
        private String userName;
    
        @GetMapping("/demo")
        public String demo() {
            log.info("demo ok  !!!");
            return "demo ok  !!! userName:" + userName;
    
        }
    }
    
    
    4. 拉取配置两种方式及命名空间、组的使用
    1. 说明
      在这里插入图片描述
      在这里插入图片描述

    2. 命名空间创建

    用于项目拆分。每个项目的配置文件相互隔离

    路径:http://localhost:8848/nacos/#/namespace?serverId=center&group=&dataId=&namespace=undefined&namespaceShowName=undefined
    在这里插入图片描述
    路径:http://localhost:8848/nacos/#/namespace?serverId=center&group=&dataId=&namespace=undefined&namespaceShowName=undefined

    在这里插入图片描述
    路径:http://localhost:8848/nacos/#/configurationManagement?serverId=center&group=&dataId=&namespace=undefined&namespaceShowName=undefined&appName=&pageSize=&pageNo=
    在这里插入图片描述
    3. 组的使用

    用来区分项目之间的服务

    配置列表->点击命名空间ems->+
    在这里插入图片描述
    名称:configclient-dev.yml
    分组:CONFIGCLIENT

    在这里插入图片描述
    配置文件:springcloudalibaba_04configclient\src\main\resources\bootstrap.yml

    spring:
      cloud:
        nacos:
          config:
            server-addr: 127.0.0.1:8848  # config server地址
            group: CONFIGCLIENT    # 哪个组进行配置获取
            name: configclient-dev  # 文件名称
            file-extension: yml  #文件扩展名
            namespace: 48c471f1-6409-4048-b203-4cd4a257243c  # 文件命名空间
    

    配置文件说明

    命名空间必须是命名空间ID
    默认的public可以不配做命名空间

    在这里插入图片描述
    访问:http://localhost:8888/demo
    在这里插入图片描述

    5. 拉取配置的导入导出

    选中要导出的配置,一键导出
    在这里插入图片描述
    删除当前配置
    在这里插入图片描述
    访问:http://localhost:8888/demo 报错
    在这里插入图片描述
    导入配置
    在这里插入图片描述
    导入成功页面
    在这里插入图片描述
    访问:http://localhost:8888/demo
    在这里插入图片描述

    3、nacos的mysql的持久化

    1. windows 本地持久化

    新建数据库
    在这里插入图片描述
    找到本地安装的nacos->conf->nacos-mysql.sql,本地myql表运行当前nacos-mysql.sqll文件
    在这里插入图片描述
    生成如下数据库表
    在这里插入图片描述
    编辑application.properties 文件
    在这里插入图片描述
    配置如下信息
    在这里插入图片描述
    重新启动nacos :startup.cmd -m standalone

    在这里插入图片描述
    访问:http://127.0.0.1:8848/nacos/#,添加配置信息
    在这里插入图片描述
    修改配置文件:springcloudalibaba_04configclient\src\main\resources\bootstrap.yml

    spring:
      cloud:
        nacos:
          config:
            server-addr: 127.0.0.1:8848  # config server地址
            group: DEFAULT_GROUP    # 哪个组进行配置获取
            name: configclient-dev  # 文件名称
            file-extension: yml  #文件扩展名
           # namespace: 48c471f1-6409-4048-b203-4cd4a257243c  # 文件命名空间
    
    
    

    访问demo:http://localhost:8888/demo
    在这里插入图片描述
    查看数据库,数据已经插入
    在这里插入图片描述

    2. windows 安装docker安装nacos

    引用博客windows10下在docker容器里部署nacos

    3. liunx 中nacos 持久化

    Docker之nacos集群部署

    在这里插入图片描述

    4、nacos的集群搭建

    1. 复制nacos为3份

    在这里插入图片描述

    2. 初始化mysql数据

    为了数据彻底情况,把表全部删除, 重新导入
    在这里插入图片描述
    运行nacos\conf\nacos-mysql.sql
    在这里插入图片描述
    运行成功
    在这里插入图片描述
    原始数据
    在这里插入图片描述

    3. 配置nacos端口,集群

    在这里插入图片描述
    修改nacos、nacos01、nacos02 ->conf->cluster.conf.examplecluster.conf
    在这里插入图片描述
    修改完成
    在这里插入图片描述
    编辑文件nacos、nacos01、nacos02 ->conf->cluster.conf 为如下内容

    127.0.0.1:8840
    127.0.0.1:8850
    127.0.0.1:8860
    

    编辑文件nacos、nacos01、nacos02 ->conf->application.properties 端口号为:
    在这里插入图片描述

    启动,在bin路径中输入cmd->回车->打开命令行
    在这里插入图片描述
    启动nacos : 不要有空格,点击回车

    win单机 启动:startup.cmd -m standalone
    win集群 启动: 双击nacos\bin\startup.cmd
    liunx 单机启动:sh startup.sh -m standalone
    liunx 集群启动:sh startup.sh

    在这里插入图片描述
    访问

    http://127.0.0.1:8840/nacos/#
    http://127.0.0.1:8850/nacos/#
    http://127.0.0.1:8860/nacos/#

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    查看端口8840 8850 8860 的节点
    在这里插入图片描述

    4. 启动测试

    修改:springbootalibaba_01nacosclient\src\main\resources\application.yml

    server:
      port: 9002
    spring:
      application:
        name: NOCASCLIENT
      cloud:
        nacos:
          server-addr: http://127.0.0.1:8840/  # server 地址
          discovery:
            server-addr: http://127.0.0.1:8840/ # client
            service: ${spring.application.name}-${spring.cloud.client.ip-address}:${server.port}
    
    

    查看:http://127.0.0.1:8840/nacos/# 下的服务列表

    在这里插入图片描述
    查看:http://127.0.0.1:8850/nacos/# http://127.0.0.1:8860/nacos/# 下的服务列表 没有同步
    在这里插入图片描述

    五、Nginx 实现Nacos高可用

    在这里插入图片描述

    六、Sentinel

    Sentinel 简单使用:https://blog.csdn.net/qq_41538097/article/details/124330640
    下载dashboard:https://github.com/alibaba/Sentinel/releases
    dashboard启动命令:java -jar -Dserver.port=9191 sentinel-dashboard-1.8.5.jar
    dashboard访问:http://localhost:9191/#/dashboard

    1. Dashboard 安装

    1. 下载:https://github.com/alibaba/Sentinel/releases
      在这里插入图片描述

    2. 运行命令

      找到所在目录->路径中输入cm->enter
      在这里插入图片描述

    弹出命令窗口

    在这里插入图片描述

    输入命令

    默认端口号:8080

    java -jar -Dserver.port=9191 sentinel-dashboard-1.8.5.jar
    

    在这里插入图片描述

    1. 访问:http://localhost:9191/#/dashboard/home

    在这里插入图片描述

    2. Sentinel 项目创建

    1. 新建module Sentinel

    名称:springcloudalibaba_05sentinel
    在这里插入图片描述

    2. 配置 pom.xml

     <dependencies>
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
            
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
            dependency>
            
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-starter-alibaba-sentinelartifactId>
            dependency>
        dependencies>
    

    3. 配置application

    server:
      port: 8998 # 端口
    spring:
      application:  #application
        name: SENTINEL  #配置名称
      cloud:
        nacos: # nacos 配置服务地址
          server-addr: 127.0.0.1:8840
        sentinel:
          enabled: true #  开启 sentinel 保护
          transport:
            dashboard: 127.0.0.1:9191   #  链接 dashboard web端口
            port: 8719 # 与dashboard通信的端口 tcp端口 默认的端口
    
    

    4. 添加 启动类

    package com.xxx;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class SentinelApplication {
        public static void main(String[] args) {
            SpringApplication.run(SentinelApplication.class, args);
        }
    }
    
    

    5. 创建controller

    package com.xxx.controller;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class DemoController {
        private static final Logger log = LoggerFactory.getLogger(DemoController.class);
    
        @GetMapping("/demo")
        public String demo() {
            log.info("demo ok........");
            return "demo ok........";
        }
    }
    
    

    6. 访问

    路径:http://localhost:8998/demo

    在这里插入图片描述

    7. 访问Dashboard

    路径:http://localhost:9191/#/dashboard/metric/SENTINEL
    在这里插入图片描述

    8. 吞吐概念

    在这里插入图片描述

    在这里插入图片描述

    3. Sentinel 规则

    在这里插入图片描述

    七、整合

    在这里插入图片描述

    1. 创建空项目

    名称:springCloudAlibabaIntegration

    在这里插入图片描述

    2. 创建父moudle

    名称:springcloud_alibaba_parent在这里插入图片描述
    pom

     
        <parent>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-parentartifactId>
            <version>2.2.5.RELEASEversion>
        parent>
        <properties>
            <spring.cloud.version>Hoxton.SR6spring.cloud.version>
            <spring.cloud.alibaba.version>2.2.1.RELEASEspring.cloud.alibaba.version>
        properties>
    
    
    <dependencyManagement>
        
        <dependencies>
            
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-dependenciesartifactId>
                <version>${spring.cloud.version}version>
                <type>pomtype>
                <scope>importscope>
            dependency>
            
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-alibaba-dependenciesartifactId>
                <version>${spring.cloud.alibaba.version}version>
                <type>pomtype>
                <scope>importscope>
            dependency>
    
        dependencies>
    dependencyManagement>
    

    3. 创建工具类moudle

    名称:spinrgcloud_alibaba_commons
    在这里插入图片描述

    4. 创建用户服务moudle

    名称:springcloud_alibaba_users
    在这里插入图片描述
    pom

     <dependencies>
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
            
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
            dependency>
        dependencies>
    

    application

    server:
      port: 8888
    
    spring:
      application:
        name: USERS
      cloud:
        nacos:
          server-addr: 127.0.0.1:8840
    

    启动类

    package com.xxx;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    @SpringBootApplication
    @EnableDiscoveryClient
    public class UsersApplication {
        public static void main(String[] args) {
            SpringApplication.run(UsersApplication.class, args);
        }
    }
    
    

    controller

    package com.xxx.controller;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class UserController {
        private static final Logger log = LoggerFactory.getLogger(UserController.class);
    
        @GetMapping("/invoke")
        public String invokeProduct() {
            log.info("user invoke ok !!" );
            return "user invoke ok !!";
        }
    }
    
    
    

    访问:http://localhost:8888/invoke

    在这里插入图片描述

    5. 创建商品服务moudle

    名称:springcloud_alibaba_products
    在这里插入图片描述
    pom

     <dependencies>
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
            
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
            dependency>
        dependencies>
    

    application

    server:
      port: 9999
    
    spring:
      application:
        name: PRODUCTS
      cloud:
        nacos:
          server-addr: 127.0.0.1:8840
    

    启动类

    package com.xxx;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    @SpringBootApplication
    @EnableDiscoveryClient
    public class ProductsApplication {
        public static void main(String[] args) {
            SpringApplication.run(ProductsApplication.class, args);
        }
    }
    
    

    controller

    package com.xxx.controller;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    
    @RestController
    public class ProductController {
        private static final Logger log = LoggerFactory.getLogger(ProductController.class);
        @Value("${server.port}")
        private int port;
    
        @GetMapping("/product")
        public String product() {
            log.info("product ok !! 当前服务的端口为:" + port);
            return "product ok !! 当前服务的端口为:" + port;
        }
    }
    
    

    访问:http://localhost:9999/product

    在这里插入图片描述

    6. 用户服务调用商品服务 RestTemplate 废弃

    1. 用户添加配置类:springcloud_alibaba_users\src\main\java\com\xxx\config\BeansConfig.java
    package com.xxx.config;
    
    import org.springframework.cloud.client.loadbalancer.LoadBalanced;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.client.RestTemplate;
    
    @Configuration
    public class BeansConfig {
    
        @Bean
        @LoadBalanced
        public RestTemplate restTemplate(){
            return new RestTemplate();
        }
    }
    
    
    1. 用户控制器调用:springcloud_alibaba_users\src/main/java/com/xxx/controller/UserController.java
    package com.xxx.controller;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    
    @RestController
    public class UserController {
        private static final Logger log = LoggerFactory.getLogger(UserController.class);
        @Autowired
        private RestTemplate restTemplate;
    
        @GetMapping("/invoke")
        public String invokeProduct() {
            log.info("user invoke ok !!");
            String str = restTemplate.getForObject("http://PRODUCTS/product", String.class);
            return "user invoke ok !! 获取商品数据:" + str;
        }
    }
    
    

    访问:http://localhost:8888/invoke
    在这里插入图片描述

    7. 用户服务调用商品服务 openFeign 使用

    1. user module -> pom 引入openFeign
        
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-starter-openfeignartifactId>
            dependency>
    
    1. user 启动类开启openFeign服务
    package com.xxx;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.cloud.openfeign.EnableFeignClients;
    
    @SpringBootApplication
    @EnableDiscoveryClient
    @EnableFeignClients //开启openFeign的调用
    public class UsersApplication {
        public static void main(String[] args) {
            SpringApplication.run(UsersApplication.class, args);
        }
    }
    
    
    1. user 创建openFeign服务的接口类
    package com.xxx.feignclients;
    
    import org.springframework.cloud.openfeign.FeignClient;
    import org.springframework.web.bind.annotation.GetMapping;
    
    @FeignClient("PRODUCTS")
    public interface ProductClient {
    
        @GetMapping("/product")
        String product();
    }
    
    
    1. user controller openFeign方式调用商品服务
    package com.xxx.controller;
    
    import com.xxx.feignclients.ProductClient;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    
    @RestController
    public class UserController {
        private static final Logger log = LoggerFactory.getLogger(UserController.class);
        @Autowired
        private RestTemplate restTemplate; //restTemplate方式调用
        @Autowired
        private ProductClient productClient;//openfeign 方式调用
    
        @GetMapping("/invoke")
        public String invokeProduct() {
    
            //String str = restTemplate.getForObject("http://PRODUCTS/product", String.class);
            String str = productClient.product();
            log.info("获取商品数据:{}", str);
            return "user invoke ok !! 获取商品数据:" + str;
        }
    }
    
    
    1. 访问:http://localhost:8888/invoke
      在这里插入图片描述

    8. 用户服务调用商品服务 Sentinel

    1. user module -> pom 引入sentinel
     
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-starter-alibaba-sentinelartifactId>
            dependency>
    
    1. application 配置sentinel
    server:
      port: 8888
    
    spring:
      application:
        name: USERS
      cloud:
        nacos:
          server-addr: 127.0.0.1:8840 # nacos 地址配置
        sentinel:
          enabled: true # 开启通信
          eager: true # 取消控制台懒加载,立即生效
          transport:
            port: 8719 # 端口号,默认
            dashboard: 127.0.0.1:9191 # dashboard地址配置
    
    
    1. 重启user服务,查看sentinel服务台
      路径:http://localhost:9191/#/dashboard/flow/USERS
      在这里插入图片描述

    9. 创建网关moudle

    名称:springcloud_alibaba_gateway
    在这里插入图片描述
    pom 引入依赖

      <dependencies>
    
            
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-starter-gatewayartifactId>
            dependency>
            
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
            dependency>
    
        dependencies>
    
    

    启动类

    package com.xxx;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    @SpringBootApplication
    @EnableDiscoveryClient
    public class GatewayApplication {
        public static void main(String[] args) {
            SpringApplication.run(GatewayApplication.class, args);
        }
    }
    
    

    application 配置文件

    server:
      port: 8990
    spring:
      application:
        name: GATEWAY
      cloud:
        nacos:
          server-addr: 127.0.0.1:8840  # nacos 路径
        gateway:
          routes:
            - id: users_route
              uri: lb://USERS # user路径  原路径:http://localhost:8888  负载均衡:lb://USERS
              predicates:
                - Path=/invoke
            - id: product_route
              uri: lb://PRODUCTS # product路径  原路径: http://localhost:9999 负载均衡:lb://PRODUCTS
              predicates:
                - Path=/product
    

    启动服务访问Nacos:http://127.0.0.1:8840/nacos/index.html#
    在这里插入图片描述

    访问:http://localhost:8990/product

    在这里插入图片描述
    访问:http://localhost:8990/invoke

    在这里插入图片描述

    10. nacos 实现user统一配置

    路径:http://127.0.0.1:8840/nacos/index.html#

    1. nacos 新建命名空间

    在这里插入图片描述

    2. nacos 查看命名空间列表

    在这里插入图片描述

    3. nacos web添加配置

    配置列表->final->+

    在这里插入图片描述

    配置->发布

    在这里插入图片描述

    user配置文件如下

    server:
      port: 8888
    spring:
      application:
        name: USERS
      cloud:
        nacos:
          server-addr: 127.0.0.1:8840 # nacos 地址配置
        sentinel:
          enabled: true # 开启通信
          eager: true # 取消控制台懒加载,立即生效
          transport:
            port: 8719 # 端口号,默认
            dashboard: 127.0.0.1:9191 # dashboard地址配置
    
    

    发布成功,查看配置列表

    在这里插入图片描述

    4. users服务 pom添加nacos config client依赖

      
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
            dependency>
    

    5. users服务添加bootstrap.yml预加载配置

    路径:springcloud_alibaba_parent\springcloud_alibaba_users\src\main\resources\bootstrap.yml

    spring:
      cloud:
        nacos:
          config:
            server-addr: 127.0.0.1:8840  # 远端配置中心是谁
            namespace: e0aae3f6-6328-489c-85e4-de935b880a49
            group: USERS    # 哪个组进行配置获取
            name: users-prod  # 文件名称
            file-extension: yml  #文件扩展名
    

    6. 访问user接口

    路径:http://localhost:8888/invoke
    在这里插入图片描述

    11. nacos 实现GATEWAY统一配置

    1. nacos web添加配置

    配置列表->final->+

    配置列表->final->+

    在这里插入图片描述

    配置->发布
    在这里插入图片描述
    配置文件如下

    server:
      port: 8990
    spring:
      application:
        name: GATEWAY
      cloud:
        nacos:
          server-addr: 127.0.0.1:8840  # nacos 路径
        gateway:
          routes:
            - id: users_route
              uri: lb://USERS # user路径  原路径:http://localhost:8888  负载均衡:lb://USERS
              predicates:
                - Path=/invoke
            - id: product_route
              uri: lb://PRODUCTS # product路径  原路径: http://localhost:9999 负载均衡:lb://PRODUCTS
              predicates:
                - Path=/product
    

    发布成功,查看配置列表

    在这里插入图片描述

    2. GATEWAY服务 pom添加nacos config client依赖

      
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
            dependency>
    

    3. GATEWAY服务添加bootstrap.yml预加载配置

    spring:
      cloud:
        nacos:
          config:
            server-addr: 127.0.0.1:8840  # 远端配置中心是谁
            namespace: e0aae3f6-6328-489c-85e4-de935b880a49
            group: GATEWAY    # 哪个组进行配置获取
            name: gateway-prod       # 文件名称
            file-extension: yml  #文件扩展名
    
    
    

    4. 访问user接口

    路径:http://localhost:8990/invoke
    在这里插入图片描述

  • 相关阅读:
    C++求欧拉角(eigen库中暴露的一些问题)
    excel补充操作技能1
    Kafka与RabbitMQ:架构、性能和用例
    LeetCode每日一题(2181. Merge Nodes in Between Zeros)
    golang中协程&管道&锁
    解决win11 阻止某些应用包安装
    Vue3简单项目流程分享——工作室主页
    vue中web端播放rtsp视频流(摄像头监控视频)(海康威视录像机)
    拼多多怎么引流商家?建议收藏的几个方法,拼多多引流脚本详细使用教学分享
    使用 类加载器 或者 类对象 读取文件
  • 原文地址:https://blog.csdn.net/qq_29294165/article/details/127105699