概述
别人的学习笔记: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配置管理
两种配文件:
- application.yml
- 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 负载均衡的两种方式
- 服务器端负载均衡 (单体项目模式)
2.客户端测负载均衡
6-2 手写一个客户端侧负载均衡器
6-3 使用Ribbon实现负载均衡
SpringBoot整合Ribbon
- 依赖
libaba-nacos-discovery已经包含了Ribbon的依赖 - 注解
@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 常见容错方案
-
超时 设置请求超时时间,超出限制时间,则释放请求线程
-
限流 B服务的一个实例最大QBS为1000,为设置这个实例的允许请求QBS上线为800,当请求QBS超过800时则,再有请求流量过来则直接拒绝
-
舱壁模式
莫一个船舱进水,其他船舱也不会受影响
每个controller 通过线程池这个钢板隔开,互不影响,每个controller 崩溃不影响另一个
-
断路器 监控+开关
##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-编写生产者
- 加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rocketmq</artifactId>
<version>4.5.1</version>
</dependency>
- 没有注解
- 写配置 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>
- 没有注解
- 写配置
新建文件
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
-
加依赖
-
加注解
-
该配置
13-3 Zipkin搭建与整合
Zipkin Server下载与搭建
- SpringBoot整合Zipkin
- 加依赖
zipkin包含Sleuth
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
-
加注解
-
该配置
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项目
- 整合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>
-
写配置
-
写注解
在启动类上加注解
@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章 微服务所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复