我是靠谱客的博主 神勇未来,最近开发中收集的这篇文章主要介绍Spring Cloud Alibaba微服务从入门到进阶第1章 课程介绍第2章 Spring Boot基础2-2 Spring Boot是什么,能做什么?第3章 微服务的拆分与编写第4章 Spring Cloud Alibaba介绍a第5章 服务发现-Nacos第6章 实现负载均衡-Ribbon第7章 声明式HTTP客户端-Feign第9章 消息驱动的微服务-Spring Cloud Alibaba RocketMQ第10章 API网关-Spring Cloud Gateway第11章 微服务,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

在这里插入图片描述
SpringCloud:是一个开发分布式应用的工具集,提供了若干多的工具
SpringCloud Alibaba :是一个一站式的微服务开发解决方案,遵循了Cloud的标准

在这里插入图片描述

课程链接:
Spring Cloud Alibaba微服务从入门到进阶

手记

第1章 课程介绍

1-1 本课导学

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

1-2 项目环境搭建

maven配置阿里云仓库

打开maven的pom.xml文件
在这里插入图片描述
配置从阿里云下载依赖
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>

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

第2章 Spring Boot基础

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

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

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

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

在这里插入图片描述

启动是先mvn clean install 确保所有的jar都下载ok,防止启动运行的时候报错
在这里插入图片描述
在这里插入图片描述

2-4 Spring Boot应用组成分析

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

在这里插入图片描述

2-5 Spring Boot开发三板斧

在这里插入图片描述

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 单体应用

在这里插入图片描述
单体架构的缺点
在这里插入图片描述

3-3 微服务

一个复杂的系统拆分成若干的小型的应用,这些小型应用通过协作共同构建成这个系统,这每个小型的应用就是微服务
小型应用(微服务)之间可以通过restfulApi或者消息队列通信
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

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

3-4 项目效果演示 (05:30)
3-5 微服务拆分
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3-6 项目架构图

在这里插入图片描述

3-7 数据库设计

数据库数据建模

5款非常好用的免费数据库建模工具(免费)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3-8 API文档

API文档

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

3-11 创建项目-1

在这里插入图片描述

包结构
在这里插入图片描述

mybatis通用Mapper

github地址

1.3 和 Spring Boot 集成
在这里插入图片描述

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

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

@Builder

在这里插入图片描述

在这里插入图片描述

3-14 解决IDEA的红色警告

Intellij IDEA中Mybatis Mapper自动注入警告的6种解决方案
在这里插入图片描述

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

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

架构师的必备技能: UML(画图工具)
在这里插入图片描述
两种项目开发流程:
在这里插入图片描述
在这里插入图片描述

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

第4章 Spring Cloud Alibaba介绍

4-1 Spring Cloud Alibaba是什么

在这里插入图片描述

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

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

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

spring-boot版本说明
在这里插入图片描述
Spring Cloud 版本说明
在这里插入图片描述

伦敦地铁名:

在这里插入图片描述
SpringCloud 生产环境版本选择:
在这里插入图片描述
在这里插入图片描述

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 大白话剖析服务发现原理

在这里插入图片描述

5-3 什么是Nacos

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

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

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

Kubernetes Service

gRPC & Dubbo RPC Service

Spring Cloud RESTful Service
在这里插入图片描述

5-4 搭建Nacos Server

Github
如何确定nacos的版本和springCloudAlibaba对应版本
在这里插入图片描述

在这里插入图片描述

nacose官方参考文档
参考官方文档快速安装
在这里插入图片描述
在这里插入图片描述

安装好使用浏览器打开
在这里插入图片描述
进入nacse的管理控制台
在这里插入图片描述

5-5 将应用注册到Nacos

在这里插入图片描述


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

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

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

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

在这里插入图片描述

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

5-8 Nacos元数据

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

  • 可以下nacos控制太编辑元数据
    在这里插入图片描述

  • 也可以在配置文件中编辑元数据
    在这里插入图片描述

在这里插入图片描述

第6章 实现负载均衡-Ribbon

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

  1. 服务器端负载均衡 (单体项目模式)
    在这里插入图片描述
    2.客户端测负载均衡
    在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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";
}
}

在这里插入图片描述

6-4 Ribbon组成

在这里插入图片描述

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

在这里插入图片描述

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-最佳实践总结

在这里插入图片描述

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

6-12 支持的配置项

在这里插入图片描述

6-13 饥饿加载

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

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述可以打性能好的实例机器权重设定大一点,差的机器设的小一点

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

同一集群优先调用是指:
服务B 在北京和南京机房都有部署,服务A部署在南京机房。
当服务A调用服务B时,优先调用南京机房的服务B,当南京机房不存在可用的服务B时,服务A才会调用北京机房的服务B
在这里插入图片描述

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

在这里插入图片描述

写代码
在这里插入图片描述

@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实现的

在这里插入图片描述

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

在这里插入图片描述

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
在这里插入图片描述

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

在这里插入图片描述

7-7 支持的配置项

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

7-8 配置最佳实践总结

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

7-9 Feign的继承

在这里插入图片描述

7-10 多参数请求构造

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

7-11 Feign脱离Ribbon使用

在这里插入图片描述
// 脱离ribbon的使用, 调用任意url

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

7-12 RestTemplate vs Feign

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

7-13 Feign性能优化

在这里插入图片描述

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


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

2.写配置 yml
在这里插入图片描述

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不可以用,即为雪崩效应(也叫级联失效/级联故障)
在这里插入图片描述

8-2 常见容错方案

  1. 超时 设置请求超时时间,超出限制时间,则释放请求线程

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

  3. 舱壁模式
    莫一个船舱进水,其他船舱也不会受影响
    在这里插入图片描述
    每个controller 通过线程池这个钢板隔开,互不影响,每个controller 崩溃不影响另一个
    在这里插入图片描述

  4. 断路器 监控+开关
    在这里插入图片描述

在这里插入图片描述

##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控制台 的版本最好和依赖的版本相同
在这里插入图片描述

启动sentinel

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

打开浏览器登录

http://10.139.12.149:8980/

在这里插入图片描述
服务提供端 整合sentinel
只需要添加 yml 配置即可
在这里插入图片描述

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

启动:在这里插入图片描述

sentinel 也是懒加载

需要先访问一次
再刷新sentinel 控制台
在这里插入图片描述

在这里插入图片描述

8-5 流控规则

在这里插入图片描述

QPS: 每秒的查询率

8-6 降级规则详解

在这里插入图片描述

RT 和 异常比例统计时以秒为单位,异常数以分钟为单位
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

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 系统规则详解

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

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

在这里插入图片描述

@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

在这里插入图片描述

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使用姿势总结

在这里插入图片描述

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实现异步的方法

在这里插入图片描述

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

在这里插入图片描述

9-3 MQ适用场景

在这里插入图片描述

9-4 MQ的选择

在这里插入图片描述
常用MQ产品的对比

9-5 搭建RocketMQ

RocketMQ 4.5.1安装教程

9-6 搭建RocketMQ控制台

RocketMQ控制台安装教程

9-7 RocketMQ的术语与概念

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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
    在这里插入图片描述

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

@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 为什么要使用网关?

在这里插入图片描述

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

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

10-3 编写Spring Cloud Gateway

在这里插入图片描述

  • 加依赖
<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>
  • 改配置
    在这里插入图片描述
    打开浏览器
http://localhost:8040/cloud2/test/ribbon

在这里插入图片描述

被调用服务

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 核心概念

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

10-5 架构剖析

在这里插入图片描述

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;
}

修改配置
在这里插入图片描述
在这里插入图片描述

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

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

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

在这里插入图片描述
在这里插入图片描述
配置形式
在这里插入图片描述

在这里插入图片描述
配置形式
在这里插入图片描述类名必须以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);
});
}
}

在这里插入图片描述

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 进阶:再谈过滤器执行顺序

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

在这里插入图片描述
修改代码
在这里插入图片描述

10-15 Spring Cloud Gateway限流

Spring Cloud Gateway限流详解

10-16 本章总结

在这里插入图片描述

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

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

11-2 有状态 vs 无状态

  • 有状态(session)
    在这里插入图片描述
  • 无状态 (无状态现在使用的广泛)
    无状态中的token和有状态的中的sessio一样都是判断用户是否登录的凭证
    无状态请款下服务器端只做解密和校验不在进行存储,而是由客户端(浏览器)存储
    在这里插入图片描述
  • 无状态和有状态的优缺点
    在这里插入图片描述

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

OAuth2实现单点登录SSO
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
使用场景:
在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

11-8 访问控制模型

在这里插入图片描述
基于规则的
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
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)

在这里插入图片描述

12-2 使用Nacos管理配置

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


<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  1. 没有注解
  2. 写配置
    在这里插入图片描述
    新建文件
    bootstrap.yml

在这里插入图片描述

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

在这里插入图片描述

代码


@Value("${your.configuration}")
private String yourConfiguration;
@GetMapping("/test-config")
public String testConfiguration() {
return this.yourConfiguration;
}

在这里插入图片描述

打开nacos控制台
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

在controller加注解
@RefreshScope
在这里插入图片描述

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

12-4 应用的配置共享

在这里插入图片描述

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

12-5 引导上下文

在这里插入图片描述

默认远程配置高于本地配置
在这里插入图片描述
要把这些配置内容放到远程配置中,放在applicatin.ymla和bootstrap.yml是不生效的
在这里插入图片描述

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

在这里插入图片描述

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

搭建生产可用的Nacos集群

12-8 配置最佳实践总结

在这里插入图片描述

第13章 调用链监控-Sleuth

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

在这里插入图片描述

  • 调用链监控工具的原理
    在这里插入图片描述

在这里插入图片描述

13-2 整合Sleuth

在这里插入图片描述

  • Sleuth 术语:
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

  • springBoot整合Sleuth
  1. 加依赖
    在这里插入图片描述

  2. 加注解

  3. 该配置

13-3 Zipkin搭建与整合

在这里插入图片描述

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

在这里插入图片描述

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)

在这里插入图片描述
在这里插入图片描述
安装Elasticsearch
在这里插入图片描述

下载
官网
在这里插入图片描述

在这里插入图片描述
打开浏览器访问
在这里插入图片描述
在这里插入图片描述

指定环境变量启动
在这里插入图片描述
在这里插入图片描述

13-7 依赖关系图

在这里插入图片描述
添加依赖启动
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

第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

在这里插入图片描述

利用IDEA Statistic这个插件来检查
在这里插入图片描述

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

15-4 SonarQube

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

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

16-1 本章概要

上几章提到的监控工具
在这里插入图片描述

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

在这里插入图片描述
新建springBoot项目
在这里插入图片描述
在这里插入图片描述

  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. 写注解
    在启动类上加注解
    @EnableAdminServer
    在这里插入图片描述

在这里插入图片描述

被监控的服务要整合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监控

在这里插入图片描述

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

16-5 日志监控

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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)

最后

以上就是神勇未来为你收集整理的Spring Cloud Alibaba微服务从入门到进阶第1章 课程介绍第2章 Spring Boot基础2-2 Spring Boot是什么,能做什么?第3章 微服务的拆分与编写第4章 Spring Cloud Alibaba介绍a第5章 服务发现-Nacos第6章 实现负载均衡-Ribbon第7章 声明式HTTP客户端-Feign第9章 消息驱动的微服务-Spring Cloud Alibaba RocketMQ第10章 API网关-Spring Cloud Gateway第11章 微服务的全部内容,希望文章能够帮你解决Spring Cloud Alibaba微服务从入门到进阶第1章 课程介绍第2章 Spring Boot基础2-2 Spring Boot是什么,能做什么?第3章 微服务的拆分与编写第4章 Spring Cloud Alibaba介绍a第5章 服务发现-Nacos第6章 实现负载均衡-Ribbon第7章 声明式HTTP客户端-Feign第9章 消息驱动的微服务-Spring Cloud Alibaba RocketMQ第10章 API网关-Spring Cloud Gateway第11章 微服务所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(28)

评论列表共有 0 条评论

立即
投稿
返回
顶部