别人的学习笔记:SpringCloud Alibaba微服务实战

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud


SpringCloud:是一个开发分布式应用的工具集,提供了若干多的工具

SpringCloud Alibaba :是一个一站式的微服务开发解决方案,遵循了Cloud的标准

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_02

第1章 课程介绍

1-1 本课导学

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_03


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_04


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_05


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_06


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_07

1-2 项目环境搭建

maven配置阿里云仓库

打开maven的pom.xml文件

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_08


配置从阿里云下载依赖

https://help.aliyun.com/document_detail/131465.html?spm=5176.10695662.1996646101.searchclickresult.94a21b68rDNcab

  • maven配置指南
    打开maven的配置文件(windows机器一般在maven安装目录的conf/settings.xml),在标签中添加mirror子节点:
<mirror>
    <id>aliyunmaven</id>
    <mirrorOf>*</mirrorOf>
    <name>阿里云公共仓库</name>
    <url>https://maven.aliyun.com/repository/public</url>
</mirror>
<mirror>
    <id>aliyunmaven</id>
    <mirrorOf>central</mirrorOf>
    <name>阿里云公共仓库</name>
    <url>https://maven.aliyun.com/repository/public</url>
</mirror>

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_09


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_10

第2章 Spring Boot基础

2-1 本章概述 (01:10)

2-2 Spring Boot是什么,能做什么?

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_11


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_12

2-3 编写第一个Spring Boot应用

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_13

启动是先mvn clean install 确保所有的jar都下载ok,防止启动运行的时候报错

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_14


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_15

2-4 Spring Boot应用组成分析

pom.xml

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_16

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_17

2-5 Spring Boot开发三板斧

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_18

2-6 必会:Spring Boot Actuator 监控

Spring Boot 监控: Actuator

2-7 必会:Spring Boot配置管理

两种配文件:

  1. application.yml
  2. application.properties

2-8 必会:Profile (07:34)
2-9 本章总结 (00:59)

第3章 微服务的拆分与编写

3-1 本章概述 (01:34)

3-2 单体应用

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_19


单体架构的缺点

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_20

3-3 微服务

一个复杂的系统拆分成若干的小型的应用,这些小型应用通过协作共同构建成这个系统,这每个小型的应用就是微服务

小型应用(微服务)之间可以通过restfulApi或者消息队列通信

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_21


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_22


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_23


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_24

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_25


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_26

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_27

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_28


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_29

3-4 项目效果演示 (05:30)

3-5 微服务拆分

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_30


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_31


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_32


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_33


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_34

3-6 项目架构图

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_35

3-7 数据库设计

数据库数据建模

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_36


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_37


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_38

3-8 API文档

API文档

3-9 如何创建小程序 (02:28)
3-10 前端代码如何使用 (05:17)

3-11 创建项目-1

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_39

包结构

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_40

mybatis通用Mapper

github地址

1.3 和 Spring Boot 集成

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_41

3-12 创建项目-2 (15:37)

3-13 整合Lombok简化代码编写

@Builder

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_42

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_43

3-14 解决IDEA的红色警告

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_44

3-15 编写用户微服务与内容微服务-1

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_45


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_46

架构师的必备技能: UML(画图工具)

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_47


两种项目开发流程:

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_48


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_49

3-16 编写用户微服务与内容微服务-2 (10:51)
3-17 编写用户微服务与内容微服务-3 (11:52)
3-18 现有架构存在的问题 (02:07)

第4章 Spring Cloud Alibaba介绍

4-1 Spring Cloud Alibaba是什么

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_50

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_51


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_52

4-2 版本与兼容性 (15:16)

SpringCloud 版本发布规划
SpringCloud Alibaba 版本与springaboot版本

spring-boot版本说明

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_53


Spring Cloud 版本说明

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_54

伦敦地铁名:

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_55


SpringCloud 生产环境版本选择:

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_56


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_57

4-3 为项目整合Spring Cloud Alibaba

<dependencyManagement>
        <dependencies>
            <!--整合spring cloud-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--整合spring cloud alibaba-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>0.9.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

spring-cloud-alibaba版本说明,依赖管理

a第5章 服务发现-Nacos

5-1 服务提供者与服务消费者 (01:34)

5-2 大白话剖析服务发现原理

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_58

5-3 什么是Nacos

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

服务(Service)是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理:

Kubernetes Service

gRPC & Dubbo RPC Service

Spring Cloud RESTful Service

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_59

5-4 搭建Nacos Server

Github 如何确定nacos的版本和springCloudAlibaba对应版本

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_60

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_61

nacose官方参考文档 参考官方文档快速安装

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_62


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_63

安装好使用浏览器打开

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_64


进入nacse的管理控制台

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_65

5-5 将应用注册到Nacos

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_66

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_67

spring:
  cloud:
    nacos:
      discovery:
        # 指定nacos server的地址
        server-addr: 10.139.12.149:8848
        cluster-name: BJ

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_68

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_69

@Slf4j
@RestController
public class TestController {
    @Autowired
    private DiscoveryClient discoveryClient;

    /**
     * 测试:服务发现,证明内容中心总能找到用户中心
     *
     * @return 用户中心所有实例的地址信息
     */
    @GetMapping("test2")
    public List<ServiceInstance> getInstances() {
        // 查询指定服务的所有实例的
        return this.discoveryClient.getInstances("center1");
    }
}

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_70

5-6 为内容中心引入服务发现 (05:06)

5-7 Nacos服务发现的领域模型

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_71

  • 命名空间
    用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

5-8 Nacos元数据

元信息
Nacos数据(如配置和服务)描述信息,如服务版本、权重、容灾策略、负载均衡策略、鉴权配置、各种自定义标签 (label),从作用范围来看,分为服务级别的元信息、集群的元信息及实例的元信息。


  • 可以下nacos控制太编辑元数据
  • 基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_72


  • 也可以在配置文件中编辑元数据
  • 基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_73

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_74

第6章 实现负载均衡-Ribbon

6-1 负载均衡的两种方式


  1. 服务器端负载均衡 (单体项目模式)
  2. 基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_75

  3. 2.客户端测负载均衡
  4. 基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_76


6-2 手写一个客户端侧负载均衡器

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_77

6-3 使用Ribbon实现负载均衡

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_78

SpringBoot整合Ribbon

  1. 依赖
    libaba-nacos-discovery已经包含了Ribbon的依赖
  2. 注解
    @LoadBalanced
    在Spring Cloud中服务的发现与消费一文中首先使用了RestTemplate并且开启了客户端负载均衡功能,开启负载均衡很简单,只需要在RestTemplate的bean上再添加一个@LoadBalanced注解即可

服务消费端(客户端) 服务名cloud1 端口号8081

@SpringBootApplication
@EnableFeignClients// (defaultConfiguration = GlobalFeignConfiguration.class)
public class ContentCenterApplication {

    public static void main(String[] args) {
        SpringApplication.run(ContentCenterApplication.class, args);
    }

    // 在spring容器中,创建一个对象,类型RestTemplate;名称/ID是:restTemplate
    // <bean id="restTemplate" class="xxx.RestTemplate"/>
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return  new RestTemplate();
    }
}
@Slf4j
@RestController
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class TestController {
    @GetMapping("cloud1/ribbon")
    public String getRibbon() {
       String result = this.restTemplate.getForObject("http://cloud2/test/ribbon",String.class);
        System.out.println(result);
        return result;
    }
    }

没有配置

服务提供端代码

服务提供端1 服务名cloud2 端口号8082

@Slf4j
@RestController
public class TestController {
    @GetMapping("test/ribbon")
    public String getRibbon() {
        return "test/ribbon/8082";
    }
    }

服务提供端2 服务名cloud2 端口号8083

@Slf4j
@RestController
public class TestController {
    @GetMapping("test/ribbon")
    public String getRibbon() {
        return "test/ribbon/8083";
    }
    }

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_79

6-4 Ribbon组成

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_80

6-5 Ribbon内置的负载均衡规则

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_81

6-6 细粒度配置自定义01-Java代码方式

6-7 细粒度配置自定义02-父子上下文 (04:46)

6-8 细粒度配置自定义03-配置属性方式

applicattion.yml

#user-center:
#  ribbon:
#    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

6-9 细粒度配置自定义04-两种方式对比 (01:45)

6-10 细粒度配置自定义05-最佳实践总结

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_82

6-11 全局配置 (01:30)

6-12 支持的配置项

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_83

6-13 饥饿加载

ribbon:
  eager-load:
    enabled: true
    clients: user-center,user2-center,user3-center

6-14 扩展Ribbon-支持Nacos权重

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_84


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_85


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_86

可以打性能好的实例机器权重设定大一点,差的机器设的小一点

6-15 扩展Ribbon-同一集群优先调用

同一集群优先调用是指:

服务B 在北京和南京机房都有部署,服务A部署在南京机房。

当服务A调用服务B时,优先调用南京机房的服务B,当南京机房不存在可用的服务B时,服务A才会调用北京机房的服务B

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_87

6-16 扩展Ribbon-基于元数据的版本控制 (02:36)
6-17 深入理解Nacos的Namespace (02:51)
6-18 现有架构存在的问题 (02:48)

第7章 声明式HTTP客户端-Feign

7-1 使用Feign实现远程HTTP调用

1.加依赖

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

2.启动类加注解

@EnableFeignClients

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_88

写代码

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_89

@FeignClient(name = "user-center")
public interface UserCenterFeignClient {
    /**
     * http://user-center/users/{id}
     *
     * @param id
     * @return
     */
    @GetMapping("/users/{id}")
    UserDTO findById(@PathVariable Integer id);
}

Feign也实现了负载均衡,Feign的负载均衡也主要是通过Ribbon实现的

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_90

7-3 细粒度配置自定义-01-Java代码方式-指定日志级别

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_91

7-4 细粒度配置自定义-02-配置属性方式-指定日志级别

服务端:服务提供端

@GetMapping("test/ribbon")
    public String getRibbon() {
        return "test/ribbon/8082";
    }

客户端:服务访问端

@FeignClient(name = "user-center")
public interface UserCenterFeignClient {
    /**
     * http://user-center/users/{id}
     *
     * @param id
     * @return
     */
    @GetMapping("/users/{id}")
    UserDTO findById(@PathVariable Integer id);
}

yml

feign:
    config:
    #想要调用微服务的名称
     user-center:
        loggerLevel: full

7-5 全局配置-01-Java代码方式-指定日志级别

7-6 全局配置-02-配置属性方式-指定日志级别

feign:
  client:
    config:
      # 全局配置
      default:
        loggerLevel: full

日志生效的前提是 SpringBooot 的日志打印级别为debug

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_92

logging:
  level:
    com:
      example:
        cloud1:
          util:
            Cloud1FeignClient: debug

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_93

7-7 支持的配置项

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_94


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_95

7-8 配置最佳实践总结

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_96


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_97


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_98

7-9 Feign的继承

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_99

7-10 多参数请求构造

如何使用Feign构造多参数的请求

7-11 Feign脱离Ribbon使用

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_100


// 脱离ribbon的使用, 调用任意url

@FeignClient(name = "baidu", url = "http://www.baidu.com")
public interface TestBaiduFeignClient {
    @GetMapping("")
    String index();
}

7-12 RestTemplate vs Feign

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_101


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_102

7-13 Feign性能优化

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_103

为openfeign添加连接池
1.加依赖 pom

<dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-httpclient</artifactId>
        </dependency>

2.写配置 yml

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_104

feign:
  client:
    config:
      # 全局配置
      default:
        loggerLevel: full
        requestInterceptors:
          - com.itmuch.contentcenter.feignclient.interceptor.TokenRelayRequestIntecepor
  httpclient:
    # 让feign使用apache httpclient做请求;而不是默认的urlconnection
    enabled: true
    # feign的最大连接数
    max-connections: 200
    # feign单个路径的最大连接数
    max-connections-per-route: 50

7-14 常见问题总结

Feign常见问题总结

7-15 现有架构总结

第8章 服务容错-Sentinel

8-1 雪崩效应

A不可用导致B不可用,B不可用导致C/D不可以用,即为雪崩效应(也叫级联失效/级联故障)

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_105

8-2 常见容错方案

  1. 超时 设置请求超时时间,超出限制时间,则释放请求线程
  2. 限流 B服务的一个实例最大QBS为1000,为设置这个实例的允许请求QBS上线为800,当请求QBS超过800时则,再有请求流量过来则直接拒绝

  3. 舱壁模式
    莫一个船舱进水,其他船舱也不会受影响
  4. 基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_106

  5. 每个controller 通过线程池这个钢板隔开,互不影响,每个controller 崩溃不影响另一个
  6. 基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_107


  7. 断路器 监控+开关
  8. 基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_108

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_109

##8-3 SpringBoot整合 Sentinel实现容错

Sentinel是支持轻量级的流量控制、熔断降级的java库
1.加依赖

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

没有注解/没有配置,只要加上sentinel的依赖应用就整合好了sentinel

8-4 Sentinel控制台

下载Sentinel控制台

注意:生产环境中Sentinel控制台 的版本最好和依赖的版本相同

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_110

启动sentinel

nohup java -jar sentinel-dashboard-1.6.2.jar --server.port=8980 &

打开浏览器登录

http://10.139.12.149:8980/

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_111


服务提供端 整合sentinel

只需要添加 yml 配置即可

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_112

spring:
  cloud:
    nacos:
      discovery:
        # 指定nacos server的地址
        server-addr: localhost:8848
        cluster-name: BJ
        # namespace: 56116141-d837-4d15-8842-94e153bb6cfb
    sentinel:
      filter:
        # 打开/关闭掉对Spring MVC端点的保护
        enabled: true
      transport:
        # 指定sentinel 控制台的地址
        dashboard: localhost:8080

启动:

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_113

sentinel 也是懒加载

需要先访问一次

再刷新sentinel 控制台

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_114

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_115

8-5 流控规则

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_116

QPS: 每秒的查询率

8-6 降级规则详解

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_117

RT 和 异常比例统计时以秒为单位,异常数以分钟为单位

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_118


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_119

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_120

8-7 热点规则详解

@GetMapping("test-hot")
    @SentinelResource("hot")
    public String testHot(
        @RequestParam(required = false) String a,
        @RequestParam(required = false) String b
    ) {
        return a + " " + b;
    }

8-8 系统规则详解

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_121


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_122


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_123

8-9 授权规则详解 (01:06)
8-10 代码配置规则 (03:15)
8-11 Sentinel与控制台通信原理剖析 (03:26)
8-12 控制台相关配置项 (01:38)
8-13 Sentinel API详解 (13:13)
8-14 SentinelResource注解详解 (08:40)

8-15 RestTemplate整合Sentinel

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_124

@SpringBootApplication
@EnableFeignClients// (defaultConfiguration = GlobalFeignConfiguration.class)
public class ContentCenterApplication {

    public static void main(String[] args) {
        SpringApplication.run(ContentCenterApplication.class, args);
    }

    // 在spring容器中,创建一个对象,类型RestTemplate;名称/ID是:restTemplate
    // <bean id="restTemplate" class="xxx.RestTemplate"/>
    @Bean
    @LoadBalanced
    @SentinelRestTemplate
    public RestTemplate restTemplate() {
        RestTemplate template = new RestTemplate();
        template.setInterceptors(
            Collections.singletonList(
                new TestRestTemplateTokenRelayInterceptor()
            )
        );
        return template;
    }
}
@Autowired
    private RestTemplate restTemplate;

    @GetMapping("/test-rest-template-sentinel/{userId}")
    public UserDTO test(@PathVariable Integer userId) {
        return this.restTemplate
            .getForObject(
                "http://user-center/users/{userId}",
                UserDTO.class, userId);
    }

可以在调试时避免干扰关掉

resttemplate:
  sentinel:
    # 设置成false,表示关闭@SentinelRestTemplate注解
    enabled: false

8-16 Feign整合Sentinel

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_125

feign:
  sentinel:
    # 为feign整合sentinel
    enabled: true
  • fallback
@FeignClient(name = "cloud2", fallback = Cloud1FeignClientFallback.class)
public interface Cloud1FeignClient {

    /**
     * http://cloud2/test/ribbon}
     */
    @GetMapping("/test/ribbon")
    String getRibbon();

}
@Component
public class Cloud1FeignClientFallback implements Cloud1FeignClient {

    @Override
    public String getRibbon() {
        return "Feign流控/降级处理方法";
    }
}

捕获连接失败的异常信息

fallbackFactory 比fallback 强大,fallbackFactory 可以捕获异常

@FeignClient(name = "user-center",
 //  fallback = UserCenterFeignClientFallback.class,
    fallbackFactory = UserCenterFeignClientFallbackFactory.class
)
public interface UserCenterFeignClient {
    /**
     * http://user-center/users/{id}
     *
     * @param id
     * @return
     */
    @GetMapping("/users/{id}")
    UserDTO findById(@PathVariable Integer id);
}
@Component
@Slf4j
public class UserCenterFeignClientFallbackFactory implements FallbackFactory<UserCenterFeignClient> {
    @Override
    public UserCenterFeignClient create(Throwable cause) {
        return new UserCenterFeignClient() {
            @Override
            public UserDTO findById(Integer id) {
                log.warn("远程调用被限流/降级了", cause);
                UserDTO userDTO = new UserDTO();
                userDTO.setWxNickname("流控/降级返回的用户");
                return userDTO;
            }
        };
    }
}

8-17 Sentinel使用姿势总结

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_126

8-18 规则持久化01-拉模式

不做持久化,每次重启微服务,之前设置在sentinel的规则就没有了

Alibaba Sentinel规则持久化-推模式-手把手教程【基于Nacos】

8-19 规则持久化02-推模式 (08:26)

8-20 生产环境使用Sentinel

8-21 集群流控 (04:36)
8-22 扩展Sentinel01-错误页优化 (09:15)
8-23 扩展Sentinel02-实现区分来源 (05:35)
8-24 扩展Sentinel03-RESTful URL支持 (04:32)
8-25 扩展Sentinel04-透过现象看本质 (03:57)
8-26 配置项总结 (01:51)
8-27 本章总结:再谈常见容错方案 (03:23)

第9章 消息驱动的微服务-Spring Cloud Alibaba RocketMQ

9-1 Spring实现异步的方法

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_127

9-2 引入MQ后的架构演进

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_128

9-3 MQ适用场景

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_129

9-4 MQ的选择

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_130


常用MQ产品的对比

9-5 搭建RocketMQ

RocketMQ 4.5.1安装教程

9-6 搭建RocketMQ控制台

RocketMQ控制台安装教程

9-7 RocketMQ的术语与概念

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_131

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_132

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_133

9-8 RocketMQ进阶

Apache RocketMQ开发者指南

9-9 Spring消息编程模型01-编写生产者

  1. 加依赖
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-rocketmq</artifactId>
             <version>4.5.1</version>
        </dependency>
  1. 没有注解

  2. 写配置 yml
  3. 基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_134


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_135


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_136

@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ShareService {

    private final RocketMQTemplate rocketMQTemplate;
    private final RocketmqTransactionLogMapper rocketmqTransactionLogMapper;


    @Transactional(rollbackFor = Exception.class)
    public void auditByIdWithRocketMqLog(Integer id, ShareAuditDTO auditDTO, String transactionId) {
        this.auditByIdInDB(id, auditDTO);

        this.rocketmqTransactionLogMapper.insertSelective(
            RocketmqTransactionLog.builder()
                .transactionId(transactionId)
                .log("审核分享...")
                .build()
        );
    }
    }

9-10 Spring消息编程模型02-编写消费者

Spring Boot Messaging

@RocketMQTransactionListener(txProducerGroup = "tx-add-bonus-group")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class AddBonusTransactionListener implements RocketMQLocalTransactionListener {
    private final ShareService shareService;
    private final RocketmqTransactionLogMapper rocketmqTransactionLogMapper;

    @Override
    public RocketMQLocalTransactionState checkLocalTransaction(Message msg) {
        MessageHeaders headers = msg.getHeaders();
        String transactionId = (String) headers.get(RocketMQHeaders.TRANSACTION_ID);

        // select * from xxx where transaction_id = xxx
        RocketmqTransactionLog transactionLog = this.rocketmqTransactionLogMapper.selectOne(
            RocketmqTransactionLog.builder()
                .transactionId(transactionId)
                .build()
        );
        if (transactionLog != null) {
            return RocketMQLocalTransactionState.COMMIT;
        }
        return RocketMQLocalTransactionState.ROLLBACK;
    }
}

9-11 分布式事务01-流程剖析、概念术语、事务消息三状态 (05:37)
9-12 分布式事务02-编码实现 (18:54)
9-13 Spring Cloud Stream是什么? (01:28)
9-14 Spring Cloud Stream编程模型 (02:04)
9-15 Spring Cloud Stream-编写生产者 (04:53)
9-16 Spring Cloud Stream-编写消费者 (04:02)
9-17 Spring Cloud Stream自定义接口01-发送消息【附带解决Mybatis的坑】 (04:19)
9-18 Spring Cloud Stream自定义接口02-消费消息 (03:46)
9-19 透过现象看本质 (02:21)
9-20 消息过滤 (02:02)
9-21 Spring Cloud Stream的监控 (03:05)
9-22 Spring Cloud Stream异常处理 (02:53)
9-23 Spring Cloud Stream + RocketMQ实现分布式事务01-重构生产者 (10:38)
9-24 Spring Cloud Stream + RocketMQ实现分布式事务02-重构消费者 (05:51)
9-25 Spring Cloud Stream知识盘点【必看】 (01:47)

第10章 API网关-Spring Cloud Gateway

10-1 为什么要使用网关?

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_137

10-2 Spring Cloud Gateway是什么?优缺点分析

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_138


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_139


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_140

10-3 编写Spring Cloud Gateway

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_141

  • 加依赖
<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

  • 改配置
  • 基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_142

  • 打开浏览器
http://localhost:8040/cloud2/test/ribbon

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_143

被调用服务

server:
  port: 8082
  application:
    name: cloud2
    
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 10.139.12.149:8848
@GetMapping("test/ribbon")
    public String getRibbon() {
        System.out.println("test/ribbon/8083");
        return "test/ribbon/8082";
    }

10-4 核心概念

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_144


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_145

10-5 架构剖析

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_146

10-6 内置路由谓词工厂详解(Route Predicate Factories)

Spring Cloud Gateway-路由谓词工厂详解(Route Predicate Factories)

10-7 自定义路由谓词工厂

类名必须以RoutePredicateFactory结尾

@Component
public class TimeBetweenRoutePredicateFactory
    extends AbstractRoutePredicateFactory<TimeBeweenConfig> {
    public TimeBetweenRoutePredicateFactory() {
        super(TimeBeweenConfig.class);
    }

    @Override
    public Predicate<ServerWebExchange> apply(TimeBeweenConfig config) {
        LocalTime start = config.getStart();
        LocalTime end = config.getEnd();
        return exchange -> {
            LocalTime now = LocalTime.now();
            return now.isAfter(start) && now.isBefore(end);
        };
    }

    @Override
    public List<String> shortcutFieldOrder() {
        return Arrays.asList("start", "end");
    }

    public static void main(String[] args) {
        DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT);
        System.out.println(formatter.format(LocalTime.now()));
    }
}
@Data
public class TimeBeweenConfig {
    private LocalTime start;
    private LocalTime end;
}

修改配置

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_147


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_148

10-8 内置过滤器工厂详解(GatewayFilter Factories)【详解&调试技巧】

Spring Cloud Gateway-过滤器工厂详解(GatewayFilter Factories)

10-9 自定义过滤器工厂【生命周期、自定义的方式、核心API、编码】

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_149


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_150


配置形式

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_151

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_152


配置形式

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_153

类名必须以GatewayFilterFactory结尾

@Slf4j
@Component
public class PreLogGatewayFilterFactory
    extends AbstractNameValueGatewayFilterFactory {
    @Override
    public GatewayFilter apply(NameValueConfig config) {
        return ((exchange, chain) -> {
            log.info("请求进来了...{},{}", config.getName(), config.getValue());
            ServerHttpRequest modifiedRequest = exchange.getRequest()
                .mutate()
                .build();
            ServerWebExchange modifiedExchange = exchange.mutate()
                .request(modifiedRequest)
                .build();

            return chain.filter(modifiedExchange);
        });
    }
}

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_154

10-10 全局过滤器

Spring Cloud Gateway-全局过滤器(Global Filters)

10-11 悬念:如何为Spring Cloud Gateway整合Sentinel?

Sentinel1.6 才支持整合Spring Cloud Gateway

10-12 监控Spring Cloud Gateway

Spring Cloud Gateway监控

10-13 排错、调试技巧总结【调试排错三板斧】

Spring Cloud Gateway排错、调试技巧总结

10-14 进阶:再谈过滤器执行顺序

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_155


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_156


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_157

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_158


修改代码

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_159

10-15 Spring Cloud Gateway限流

Spring Cloud Gateway限流详解

10-16 本章总结

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_160

第11章 微服务的用户认证与授权

11-1 认证授权——必然会面临的话题

11-2 有状态 vs 无状态


  • 有状态(session)
  • 基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_161



  • 无状态 (无状态现在使用的广泛)
    无状态中的token和有状态的中的sessio一样都是判断用户是否登录的凭证
    无状态请款下服务器端只做解密和校验不在进行存储,而是由客户端(浏览器)存储
  • 基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_162



  • 无状态和有状态的优缺点
  • 基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_163


11-3 微服务认证方案01-“处处安全”方案

OAuth2实现单点登录SSO

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_164


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_165

11-4 微服务认证方案02-外部无状态,内部有状态方案

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_166


使用场景:

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_167

11-5 微服务认证方案03-“网关认证授权,内部裸奔”方案

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_168

11-6 微服务认证方案04-“内部裸奔”改进方案

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_169

11-7 微服务认证方案05-方案对比与选择

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_170

11-8 访问控制模型

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_171


基于规则的

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_172

11-9 JWT是什么?【是什么、组成、上手】

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_173


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_174


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_175


JWT操作工具类分享

Springboot整合JWT

<dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-api</artifactId>
            <version>0.10.7</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-impl</artifactId>
            <version>0.10.7</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-jackson</artifactId>
            <version>0.10.7</version>
            <scope>runtime</scope>
        </dependency>

11-10 实现认证授权01-实现小程序登录1 (10:05)
11-11 实现认证授权01-实现小程序登录2 (14:32)
11-12 AOP实现登录状态检查 (20:39)
11-13 内容中心实现登录状态检查 (04:06)
11-14 Feign实现Token传递 (09:29)
11-15 RestTemplate实现Token传递 (09:41)
11-16 AOP实现用户权限验证 (18:48)
11-17 网关、用户中心、内容中心、前端登录授权集成测试 (04:36)
11-18 本章总结 (02:12)

第12章 配置管理-Nacos

12-1 为什么要实现配置管理? (01:52)

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_176

12-2 使用Nacos管理配置

SpringBoot整合Nacos管理配置
1.加依赖

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
  1. 没有注解

  2. 写配置
  3. 基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_177

  4. 新建文件
    bootstrap.yml

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_178

spring:
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
  application:
    name: content-center
  profiles:
    active: dev

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_179

代码

@Value("${your.configuration}")
    private String yourConfiguration;

    @GetMapping("/test-config")
    public String testConfiguration() {
        return this.yourConfiguration;
    }

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_180

打开nacos控制台

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_181


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_182


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_183

12-3 配置属性动态刷新与回滚(附回滚Bug)

在controller加注解

@RefreshScope

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_184

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_185


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_186

12-4 应用的配置共享

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_187

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_188


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_189


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_190


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_191


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_192


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_193

12-5 引导上下文

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_194

默认远程配置高于本地配置

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_195


要把这些配置内容放到远程配置中,放在applicatin.ymla和bootstrap.yml是不生效的

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_196

12-6 Nacos数据持久化 (05:22)

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_197

12-7 搭建生产可用的Nacos集群

搭建生产可用的Nacos集群

12-8 配置最佳实践总结

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_198

第13章 调用链监控-Sleuth

13-1 大白话剖析调用链监控原理

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_199


  • 调用链监控工具的原理
  • 基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_200


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_201

13-2 整合Sleuth

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_202


  • Sleuth 术语:
  • 基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_203


  • 基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_204


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_205

  • springBoot整合Sleuth

  1. 加依赖
  2. 基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_206

  3. 加注解
  4. 该配置

13-3 Zipkin搭建与整合

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_207

Zipkin Server下载与搭建

  • SpringBoot整合Zipkin
  1. 加依赖
    zipkin包含Sleuth
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zipkin</artifactId>
        </dependency>
  1. 加注解
  2. 该配置
spring:
  zipkin:
    base-url: http://localhost:9411/
    discoveryClientEnabled: false
  sleuth:
    sampler:
      # 抽样率,默认是0.1(10%)
      probability: 1.0

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_208

13-4 整合Zipkin之后Nacos报错解决 (07:30)

解决Spring Cloud Alibaba/Spring Cloud整合Zipkin之后的报错问题

spring:
  zipkin:
    base-url: http://localhost:9411/
    discoveryClientEnabled: false

这其实是Spring Cloud Sleuth子项目 spring-cloud-sleuth-zipkin 的一个Bug!

相关的Issue在:https://github.com/spring-cloud/spring-cloud-sleuth/issues/1376
解决的Pul Request在:https://github.com/spring-cloud/spring-cloud-sleuth/pull/1379 ,代码已经合并了,在 Spring Cloud Greenwich SR3 版本中会修正!
简单总结一下:

如果你使用的是Greenwich SR3之前的版本,务必使用 spring.zipkin.discoveryClientEnabled = false ,否则配置不生效!!
如果你使用的是Greenwich SR3及更高版本,可使用 discovery-client-enabled 或者 discoveryClientEnabled 。

13-5 为所有微服务整合Zipkin (06:38)

13-6 Zipkin数据持久化(Elasticsearch)

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_209


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_210


安装Elasticsearch

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_211

下载

官网

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_212

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_213


打开浏览器访问

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_214


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_215

指定环境变量启动

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_216


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_217

13-7 依赖关系图

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_218


添加依赖启动

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_219


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_220

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_221

第14章 业务功能完善
14-1 本章概要 (00:24)
14-2 编写分享列表页 (12:03)
14-3 解决Mybatis结果映射问题 (01:59)
14-4 积分兑换指定分享 (17:00)
14-5 项目集成测试 (10:36)

第15章 进阶:既有代码优化与改善

15-1 本章概述 (01:14)

15-2 简单指标:Statistic

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_222

利用IDEA Statistic这个插件来检查

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_223

15-3 Alibaba Java代码规约 (03:30)

15-4 SonarQube

手把手使用SonarQube分析、改善项目代码质量

第16章 进阶:多维度微服务监控

16-1 本章概要

上几章提到的监控工具

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_224

16-2 Spring Boot Actuator监控数据可视化:Spring Boot Admin

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_225


新建springBoot项目

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_226


基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_227

  1. 整合springCloud 和springCloud alibaba
<dependencyManagement>
        <dependencies>
            <!--整合spring cloud-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--整合spring cloud alibaba-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>0.9.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

把springBoot Adimn 注册到nacos

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

  1. 写配置
  2. 基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_228


  3. 写注解
    在启动类上加注解
    @EnableAdminServer
  4. 基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_spring_229

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_230

被监控的服务要整合actuator

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: always

16-3 JVM监控

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_231

16-4 GC日志、线程Dump日志、堆Dump可视化分析 (04:02)

16-5 日志监控

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_232

Spring Cloud Sleuth使用ELK收集&分析日志

16-6 其他监控 (01:15)
第17章 进阶:完美融合异构微服务
17-1 如何完美整合异构微服务? (01:54)
17-2 Spring Cloud Wii实现完美整合 (11:45)
第18章 课程总结
18-1 课程总结 (03:20)

第19章 Spring Cloud Alibaba升级到2.1.0

Spring Cloud Alibaba升级到2.1.0

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_微服务_233

关于SPringBoot、springCloud、springCloudAlibaba 三者版本兼容性选择

基于SpringCloud Alibaba的微服务架构 spring cloud alibaba微服务从入门到进阶_Cloud_234

19-1 升级到Spring CLoud Alibaba 2.1.0-1 (04:40)
19-2 升级到Spring CLoud Alibaba 2.1.0-2 (05:17)
19-3 升级到Spring CLoud Alibaba 2.1.0-3 (02:21)
19-4 升级到Spring CLoud Alibaba 2.1.0-4 (01:15)