diff --git a/dev-protocol-springcloud/NetflixHystrix.md b/dev-protocol-springcloud/NetflixHystrix.md deleted file mode 100644 index 1609f5e..0000000 --- a/dev-protocol-springcloud/NetflixHystrix.md +++ /dev/null @@ -1,29 +0,0 @@ -## SpringCloud Netflix Hystrix - - -### SpringCloud Netflix Hystrix 概览 - - -### 使用注解方式实现服务的容错、降级 - - -### 使用编程方式实现服务的容错、降级 - - -### 编程方式开启 Hystrix 请求缓存 - - -### 注解方式开启 Hystrix 请求缓存 - - -### 编程方式应用 Hystrix 请求合并 - - -### 注解方式应用 Hystrix 请求合并 - -### OpenFeign 集成 Hystrix 开启后备模式 - - -### 使用 Hystrix 监控面板监测客户端容错 - -### SpringCloud Netflix Hystrix 容错组件总结 \ No newline at end of file diff --git a/dev-protocol-springcloud/SpringCloud项目介绍.md b/dev-protocol-springcloud/SpringCloud项目介绍.md index a944c0c..a48e422 100644 --- a/dev-protocol-springcloud/SpringCloud项目介绍.md +++ b/dev-protocol-springcloud/SpringCloud项目介绍.md @@ -23,13 +23,15 @@ ## 通用工程模块 - 通用服务 - [身份拦截] - - + - [dev-protocol-springcloud-project-mvc-config](dev-protocol-springcloud-project-mvc-config) + - [dev-protocol-springcloud-project-service-config](dev-protocol-springcloud-project-service-config) + - [dev-protocol-springcloud-project-service-sdk](dev-protocol-springcloud-project-service-sdk) - 授权、鉴权中心微服务 - [dev-protocol-springcloud-project-authority-center](dev-protocol-springcloud-project-authority-center) - 用户账户微服务 - + - [dev-protocol-springcloud-project-account-service](dev-protocol-springcloud-project-account-service) - 商品微服务 - + - [dev-protocol-springcloud-project-goods-service](dev-protocol-springcloud-project-goods-service) - 订单微服务 - + - - 物流微服务 \ No newline at end of file diff --git a/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/.gitignore b/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/.gitignore new file mode 100644 index 0000000..5ff6309 --- /dev/null +++ b/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/.gitignore @@ -0,0 +1,38 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/NetflixHystrix.md b/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/NetflixHystrix.md new file mode 100644 index 0000000..eae75f6 --- /dev/null +++ b/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/NetflixHystrix.md @@ -0,0 +1,45 @@ +## SpringCloud Netflix Hystrix + + +### SpringCloud Netflix Hystrix 概览 +- Hystrix 是什么、设计目标是什么 + - Hystrix 是一个库,通过添加延迟容忍和容错逻辑,帮助你控制这些分布式服务之间的交互 + - Hystrix 通过隔离服务之间的访问点、停止级联失败和提供回退选项来实现服务之间的容错 + - Hystrix 有四大设计目标 + - 对客户端访问的延迟和故障进行保护和控制 + - 在复杂的分布式系统中阻止级联故障 + - 快速失败,快速恢复 + - 兜底回退,尽可能优雅的降级 +--- +- Hystrix 解决了什么问题 + - 复杂分布式系统中服务之间存在许多依赖项,依赖项可能会存在故障,如果不做故障隔离整个服务可能会被拖垮 +--- +- Hystrix 是如何实现它的目标的 + - 对依赖项(服务)进行包装代理,不直接与依赖项交互 + - 调用超时时间允许自行设定,超时之后立刻熔断报错 + - 每一个依赖项都在自己的空间内(线程池或信号量隔离),依赖项之间不存在干扰 + - 请求依赖项失败后,可以选择出错或者是兜底回退 + +### 使用注解方式实现服务的容错、降级 + + +### 使用编程方式实现服务的容错、降级 + + +### 编程方式开启 Hystrix 请求缓存 + + +### 注解方式开启 Hystrix 请求缓存 + + +### 编程方式应用 Hystrix 请求合并 + + +### 注解方式应用 Hystrix 请求合并 + +### OpenFeign 集成 Hystrix 开启后备模式 + + +### 使用 Hystrix 监控面板监测客户端容错 + +### SpringCloud Netflix Hystrix 容错组件总结 \ No newline at end of file diff --git a/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/pom.xml b/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/pom.xml new file mode 100644 index 0000000..4cb3698 --- /dev/null +++ b/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/pom.xml @@ -0,0 +1,65 @@ + + + 4.0.0 + + org.example + dev-protocol + 1.0-SNAPSHOT + ../../pom.xml + + + dev-protocol-springcloud-hystrix + + dev-protocol-springcloud-hystrix + Hystrix 模块 + + + 8 + 8 + UTF-8 + + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.cloud + spring-cloud-starter-netflix-hystrix + + + org.projectlombok + lombok + + + + + + ${artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + + \ No newline at end of file diff --git a/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/src/main/java/org/example/HystrixApplication.java b/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/src/main/java/org/example/HystrixApplication.java new file mode 100644 index 0000000..81cc008 --- /dev/null +++ b/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/src/main/java/org/example/HystrixApplication.java @@ -0,0 +1,17 @@ +package org.example; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.cloud.context.config.annotation.RefreshScope; + +@SpringBootApplication +@EnableDiscoveryClient +@RefreshScope // 刷新配置 +@EnableCircuitBreaker // 启动 Hystrix +public class HystrixApplication { + public static void main(String[] args) { + SpringApplication.run(HystrixApplication.class, args); + } +} \ No newline at end of file diff --git a/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/src/main/java/org/example/controller/HystrixController.java b/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/src/main/java/org/example/controller/HystrixController.java new file mode 100644 index 0000000..5203ec1 --- /dev/null +++ b/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/src/main/java/org/example/controller/HystrixController.java @@ -0,0 +1,38 @@ +package org.example.controller; + +import lombok.extern.slf4j.Slf4j; +import org.example.hystrix.UseHystrixCommandAnnotation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

Hystrix Controller

+ * */ +@Slf4j +@RestController +@RequestMapping("/hystrix") +public class HystrixController { + + private final UseHystrixCommandAnnotation hystrixCommandAnnotation; + + public HystrixController(UseHystrixCommandAnnotation useHystrixCommandAnnotation) { + this.hystrixCommandAnnotation = useHystrixCommandAnnotation; + } + + /** + * 测试使用注解的方式, 1500ms 是否会进行熔断 -> 关联http测试脚本 + */ + @GetMapping("/hystrix-command-annotation") + public List getNacosClientInfoUseAnnotation( + @RequestParam String serviceId) { + log.info("request nacos client info use annotation: [{}], [{}]", + serviceId, Thread.currentThread().getName()); + return hystrixCommandAnnotation.getNacosClientInfo(serviceId); + } +} diff --git a/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/src/main/java/org/example/hystrix/UseHystrixCommandAnnotation.java b/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/src/main/java/org/example/hystrix/UseHystrixCommandAnnotation.java new file mode 100644 index 0000000..668833a --- /dev/null +++ b/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/src/main/java/org/example/hystrix/UseHystrixCommandAnnotation.java @@ -0,0 +1,72 @@ +package org.example.hystrix; + +import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; +import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty; +import lombok.extern.slf4j.Slf4j; +import org.example.service.NacosClientService4HystrixDemo; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.stereotype.Service; + +import java.util.Collections; +import java.util.List; + +/** + *

使用 HystrixCommand 注解

+ * */ +@Slf4j +@Service +public class UseHystrixCommandAnnotation { + private final NacosClientService4HystrixDemo nacosClientService4HystrixDemo; + + public UseHystrixCommandAnnotation(NacosClientService4HystrixDemo nacosClientService4HystrixDemo) { + this.nacosClientService4HystrixDemo = nacosClientService4HystrixDemo; + } + + @HystrixCommand( + // 用于对 Hystrix 命令进行分组, 分组之后便于统计展示于仪表盘、上传报告和预警等等 + // 内部进行度量统计时候的分组标识, 数据上报和统计的最小维度就是 groupKey + groupKey = "NacosClientService", + // HystrixCommand 的名字, 默认是当前类的名字, 主要方便 Hystrix 进行监控、报警等 + commandKey = "NacosClientService", + // 舱壁模式 + threadPoolKey = "NacosClientService", + // 后备模式 - 一定要写在当前类中, 要不不生效 + fallbackMethod = "getNacosClientInfoFallback", + // 断路器模式 + commandProperties = { + // 超时时间, 单位毫秒, 超时进 fallback + @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1500"), + // 判断熔断的最少请求数, 默认是10; 只有在一定时间内请求数量达到该值, 才会进行成功率的计算 + @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"), + // 熔断的阈值默认值 50, 表示在一定时间内有50%的请求处理失败, 会触发熔断 + @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "10"), + }, + // 舱壁模式 + threadPoolProperties = { + @HystrixProperty(name = "coreSize", value = "30"), + @HystrixProperty(name = "maxQueueSize", value = "101"), + @HystrixProperty(name = "keepAliveTimeMinutes", value = "2"), + @HystrixProperty(name = "queueSizeRejectionThreshold", value = "15"), + // 在时间窗口中, 收集统计信息的次数; 在 1440ms 的窗口中一共统计 12 次 + @HystrixProperty(name = "metrics.rollingStats.numBuckets", value = "12"), + // 时间窗口, 从监听到第一次失败开始计时 + @HystrixProperty(name = "metrics.rollingStats.timeInMilliseconds", value = "1440") + } + ) + public List getNacosClientInfo(String serviceId) { + + log.info("use hystrix command annotation to get nacos client info: [{}], [{}]", + serviceId, Thread.currentThread().getName()); + return nacosClientService4HystrixDemo.getNacosClientInfo(serviceId); + } + + /** + *

getNacosClientInfo 的兜底策略 - Hystrix 后备模式

+ * */ + public List getNacosClientInfoFallback(String serviceId) { + + log.warn("can not get nacos client, trigger hystrix fallback: [{}], [{}]", + serviceId, Thread.currentThread().getName()); + return Collections.emptyList(); + } +} diff --git a/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/src/main/java/org/example/service/NacosClientService4HystrixDemo.java b/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/src/main/java/org/example/service/NacosClientService4HystrixDemo.java new file mode 100644 index 0000000..4b403d0 --- /dev/null +++ b/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/src/main/java/org/example/service/NacosClientService4HystrixDemo.java @@ -0,0 +1,38 @@ +package org.example.service; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.discovery.DiscoveryClient; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Slf4j +@Service +public class NacosClientService4HystrixDemo { + + private final DiscoveryClient discoveryClient; + + public NacosClientService4HystrixDemo(DiscoveryClient discoveryClient) { + this.discoveryClient = discoveryClient; + } + + /** + *

打印 Nacos Client 信息到日志中

+ * */ + public List getNacosClientInfo(String serviceId) { + + // 测试 UseHystrixCommandAnnotation 的超时 + try { + Thread.sleep(2000); + } catch (InterruptedException ex) { + + } + +// 测试 NacosClientHystrixCommand 熔断 +// throw new RuntimeException("has some error"); + + log.info("request nacos client to get service instance info: [{}]", serviceId); + return discoveryClient.getInstances(serviceId); + } +} diff --git a/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/src/main/resources/bootstrap.yml b/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..3a92e0a --- /dev/null +++ b/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/src/main/resources/bootstrap.yml @@ -0,0 +1,72 @@ +server: + port: 8111 + servlet: + context-path: /dev-protocol-springcloud-hystrix + +spring: + application: + name: dev-protocol-springcloud-hystrix # 应用名称也是构成 Nacos 配置管理 dataId 字段的一部分 (当 config.prefix 为空时) + cloud: + nacos: + # 服务注册发现 + discovery: + enabled: true # 如果不想使用 Nacos 进行服务注册和发现, 设置为 false 即可 + server-addr: 127.0.0.1:8848 + # server-addr: 127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850 # Nacos 服务器地址 + namespace: 1ccc74ae-9398-4dbe-b9d7-4f9addf9f40c + metadata: + management: + context-path: ${server.servlet.context-path}/actuator + # 配置管理 +# config: +# prefix: imooc-e-commerce +# file-extension: yaml # 配置内容的数据格式, 默认为 properties +# enabled: true # 如果不想使用 Nacos 进行配置管理, 设置为 false 即可 +# group: DEFAULT_GROUP # 组, 默认为 DEFAULT_GROUP +# namespace: 1ccc74ae-9398-4dbe-b9d7-4f9addf9f40c +# server-addr: 127.0.0.1:8848 + kafka: + bootstrap-servers: 127.0.0.1:9092 + producer: + retries: 3 + consumer: + auto-offset-reset: latest + sleuth: + sampler: + # ProbabilityBasedSampler 抽样策略 + probability: 1.0 # 采样比例, 1.0 表示 100%, 默认是 0.1 + # RateLimitingSampler 抽样策略, 设置了限速采集, spring.sleuth.sampler.probability 属性值无效 + rate: 100 # 每秒间隔接受的 trace 量 + zipkin: + sender: + type: kafka # 默认是 web + base-url: http://localhost:9411/ + +# Feign 的相关配置 +feign: + # feign 开启 gzip 压缩 + compression: + request: + enabled: true + mime-types: text/xml,application/xml,application/json + min-request-size: 1024 + response: + enabled: true + # 禁用默认的 http, 启用 okhttp + httpclient: + enabled: false + okhttp: + enabled: true + # OpenFeign 集成 Hystrix + hystrix: + enabled: true + +# 暴露端点 +management: + endpoints: + web: + exposure: + include: '*' + endpoint: + health: + show-details: always diff --git a/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/src/main/resources/http/communication.http b/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/src/main/resources/http/communication.http new file mode 100644 index 0000000..3d3131d --- /dev/null +++ b/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/src/main/resources/http/communication.http @@ -0,0 +1,58 @@ +### 获取 Token +POST http://127.0.0.1:8000/ecommerce-nacos-client/communication/rest-template +Content-Type: application/json + +{ + "username": "Qinyi@imooc.com", + "password": "25d55ad283aa400af464c76d713c07ad" +} + + +### 获取 Token, 带有负载均衡 +POST http://127.0.0.1:8000/ecommerce-nacos-client/communication/rest-template-load-balancer +Content-Type: application/json + +{ + "username": "Qinyi@imooc.com", + "password": "25d55ad283aa400af464c76d713c07ad" +} + + +### 通过 Ribbon 去获取 Token +POST http://127.0.0.1:8000/ecommerce-nacos-client/communication/ribbon +Content-Type: application/json + +{ + "username": "Qinyi@imooc.com", + "password": "25d55ad283aa400af464c76d713c07ad" +} + + +### 通过原生 Ribbon Api 去获取 Token +POST http://127.0.0.1:8000/ecommerce-nacos-client/communication/thinking-in-ribbon +Content-Type: application/json + +{ + "username": "Qinyi@imooc.com", + "password": "25d55ad283aa400af464c76d713c07ad" +} + + +### 通过 OpenFeign 获取 Token +POST http://127.0.0.1:8000/ecommerce-nacos-client/communication/token-by-feign +Content-Type: application/json + +{ + "username": "Qinyi@imooc.com", + "password": "25d55ad283aa400af464c76d713c07ad" +} + + +### 通过原生 Feign Api 获取 Token +POST http://127.0.0.1:8000/ecommerce-nacos-client/communication/thinking-in-feign +Content-Type: application/json + +{ + "username": "Qinyi@imooc.com", + "password": "25d55ad283aa400af464c76d713c07ad" +} diff --git a/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/src/main/resources/http/hystrix.http b/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/src/main/resources/http/hystrix.http new file mode 100644 index 0000000..594b5b2 --- /dev/null +++ b/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/src/main/resources/http/hystrix.http @@ -0,0 +1,35 @@ +### 根据提供的 serviceId 获取实例信息 +GET http://127.0.0.1:8000/dev-protocol-springcloud-hystrix/hystrix/hystrix-command-annotation?serviceId=e-commerce-nacos-client +Content-Type: application/json + +### 根据提供的 serviceId 获取实例信息 +GET http://127.0.0.1:8000/dev-protocol-springcloud-hystrix/hystrix/simple-hystrix-command?serviceId=e-commerce-nacos-client +Content-Type: application/json + +### 根据提供的 serviceId 获取实例信息 +GET http://127.0.0.1:8000/dev-protocol-springcloud-hystrix/hystrix/hystrix-observable-command?serviceId=e-commerce-nacos-client +Content-Type: application/json + +### 根据提供的 serviceId 获取实例信息 +GET http://127.0.0.1:8000/dev-protocol-springcloud-hystrix/hystrix/cache-hystrix-command?serviceId=e-commerce-nacos-client +Content-Type: application/json + +### 根据提供的 serviceId 获取实例信息 +GET http://127.0.0.1:8000/dev-protocol-springcloud-hystrix/hystrix/cache-annotation-01?serviceId=e-commerce-nacos-client +Content-Type: application/json + +### 根据提供的 serviceId 获取实例信息 +GET http://127.0.0.1:8000/dev-protocol-springcloud-hystrix/hystrix/cache-annotation-02?serviceId=e-commerce-nacos-client +Content-Type: application/json + +### 根据提供的 serviceId 获取实例信息 +GET http://127.0.0.1:8000/dev-protocol-springcloud-hystrix/hystrix/cache-annotation-03?serviceId=e-commerce-nacos-client +Content-Type: application/json + +### 根据提供的 serviceId 获取实例信息 +GET http://127.0.0.1:8000/dev-protocol-springcloud-hystrix/hystrix/request-merge +Content-Type: application/json + +### 根据提供的 serviceId 获取实例信息 +GET http://127.0.0.1:8000/dev-protocol-springcloud-hystrix/hystrix/request-merge-annotation +Content-Type: application/json diff --git a/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/src/main/resources/http/nacos-client.http b/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/src/main/resources/http/nacos-client.http new file mode 100644 index 0000000..9a454e9 --- /dev/null +++ b/dev-protocol-springcloud/dev-protocol-springcloud-hystrix/src/main/resources/http/nacos-client.http @@ -0,0 +1,13 @@ +### 查询服务实例信息 +GET http://127.0.0.1:8000/ecommerce-nacos-client/nacos-client/service-instance +Accept: application/json + +### 动态从 Nacos Server 中获取配置信息 +GET http://127.0.0.1:8000/ecommerce-nacos-client/nacos-client/project-config +Accept: application/json + +### 查看 Sleuth 跟踪信息 +GET http://127.0.0.1:9001/imooc/ecommerce-nacos-client/sleuth/trace-info +Accept: application/json +e-commerce-user: eyJhbGciOiJSUzI1NiJ9.eyJlLWNvbW1lcmNlLXVzZXIiOiJ7XCJpZFwiOjE3LFwidXNlcm5hbWVcIjpcIkltb29jUWlueWlAaW1vb2MuY29tXCJ9IiwianRpIjoiMGIxNzQyYWItMWU3OC00OTZjLWIyNTAtMjNkZGQ1ZGEyZTU1IiwiZXhwIjoxNjI0MjA0ODAwfQ.QKGHzohSHdYDHzUVHpe9gNPUgzfkPwrSbB-WiMWYjLlt2tr9BufzZM8bSt-whb_bd0hKoC6rkYYO0WUVR67uSML-2yaTL1xMIn8GH9Flyig3rpO4vefL3Hp2TXIpwHHa7WlKsLzcUpNk9lxWs2B5k0ICdYCH_jD5Tx6N7CzfSUG9u4fOnVeM9UFE2nX_DURupUh_DKCc2oOoMeyCSR7Ma8-Ab4WQU3r-U0YivR8G1A0kmKOIoTeRhM3LcPuxUPh3rCbrjzMg--fexRGw0O38Qsby6pz-ku2IlTyFXY6_jNOG1BZR34-jBOnaIciP1TExw9bFumeuC2GcowTHJVH1Nw +token: imooc diff --git a/dev-protocol-springcloud/学习计划.md b/dev-protocol-springcloud/学习计划.md new file mode 100644 index 0000000..0162ca8 --- /dev/null +++ b/dev-protocol-springcloud/学习计划.md @@ -0,0 +1,97 @@ +## SpringCloud 计划 + +- 工程模块开发 + - https://coding.imooc.com/class/chapter/522.html#Anchor + - SpringCloud Netflix Hystrix 实现微服务容错 + - 基于 SpringCloud Stream 构建消息驱动微服务 + - Seata:分布式事务解决方案 + - 订单微服务 + - 物流微服务 + - 基于 SpringCloud Alibaba Sentinel 实现网关动态限流 + - 微服务工程部署与整体可用性验证 + - https://coding.imooc.com/class/chapter/508.html#Anchor + - 实践补充 + +- Nacos + - https://coding.imooc.com/class/chapter/611.html#Anchor + - Nacos基础核心特性揭秘 + - 搭建Nacos源码环境 + - Nacos核心特性实现原理深度剖析 + - 窥探Nacos内核 + - 构造热插拔的Nacos插件 + - 探秘Nacos云原生体系 + +## 高并发处理 + +- 高并发 + - https://coding.imooc.com/class/chapter/604.html#Anchor + - 秒杀购物商城基础服务组件 + - MINIO实现OSS服务 + - 实现RateLimter限流组件的服务 + - Redission+Disruptor实现延时队列组件 + - 通过 Redis + RedLock实现分布式锁的实现组件 + - 通过XXLJOB分布式任务调度的服务组件 + - 基于Guava+SpringListener实现异步组件事件总线EventBus机制 + - 百度开源的分布式高性能的唯一ID生成器UidGenerator + - 秒杀购物商城业务服务--秒杀活动服务 + - 秒杀购物商城业务服务--商品中心 + - 秒杀购物商城业务服务--订单中心 + +- 中间件 + - Redis 使用 + - MQ 使用 + - Kafka 使用 + +- 一轮复习 + - https://coding.imooc.com/class/856.html + - 基础 + - 框架 Spring, SpringBoot, SpringCloud + - Mysql, Redis, Kafka, MQ + - 项目 + - 广告监测项目 + - 存储 + - 分布式消息队列治理 + - 电商项目 + - 秒杀模块 + - 业务模块架构 + +- 二轮复习 + - https://coding.imooc.com/class/chapter/500.html#Anchor + - 分析 Java 线程堆栈 + - JVM 性能调优 + +## 大数据 + +- 综合项目:三度关系推荐系统+数据中台 +- 电商实时数据仓库(湖仓一体)设计与实战 + + +## 其他 +- JS 逆向 +- 安卓逆向 +- 渗透 + + +## AI - (不建议学, 了解即可) +- https://class.imooc.com/llmappdev#Anchor +- + + +- 业务模块架构编写 +- 高并发场景处理 + + + + + + + + + + + + + + + + diff --git a/pom.xml b/pom.xml index 5a04683..3d14b7d 100644 --- a/pom.xml +++ b/pom.xml @@ -61,6 +61,7 @@ dev-protocol-springcloud/dev-protocol-springcloud-project-service-config dev-protocol-springcloud/dev-protocol-springcloud-project-service-sdk dev-protocol-springcloud/dev-protocol-springcloud-project-goods-service + dev-protocol-springcloud/dev-protocol-springcloud-hystrix