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.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
    </parent>
    <!--定义版本号-->
    <properties>
        <spring.cloud.version>Hoxton.SR6</spring.cloud.version>
        <spring.cloud.alibaba.version>2.2.1.RELEASE</spring.cloud.alibaba.version>
    </properties>
    <!--维护依赖-->
    <dependencyManagement>
        <dependencies>
            <!--springCloud 依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--springCloud阿里巴巴依赖-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </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>
        <!--web依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--nacos依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </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>
        <!--web依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--nacos依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </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>
        <!--web依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--nacos依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </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>
        <!--web依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--nacos依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--openfeign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </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>
        <!--web依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--nacos依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </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

        <!--nacos config client-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </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.youkuaiyun.com/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>
        <!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- nacos client 依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--sentinel-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </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-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
    </parent>
    <properties>
        <spring.cloud.version>Hoxton.SR6</spring.cloud.version>
        <spring.cloud.alibaba.version>2.2.1.RELEASE</spring.cloud.alibaba.version>
    </properties>


<dependencyManagement>
    <!--维护依赖-->
    <dependencies>
        <!--spring.cloud-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring.cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!--阿里巴巴-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>${spring.cloud.alibaba.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

    </dependencies>
</dependencyManagement>

3. 创建工具类moudle

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

4. 创建用户服务moudle

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

 <dependencies>
        <!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </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>
        <!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </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
    <!--openfeign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </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
 <!--sentinel-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </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>

        <!--gateway-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <!--nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </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依赖

  <!--nacos config client-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </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依赖

  <!--nacos config client-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </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
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值