Merge remote-tracking branch 'origin11/master'

# Conflicts:
#	dev-protocol-springcloud/SpringCloud项目介绍.md
master
土豆兄弟 3 days ago
commit 87e2af259a

@ -13,10 +13,11 @@
- [dev-protocol-springcloud-hystrix](dev-protocol-springcloud-hystrix) - [dev-protocol-springcloud-hystrix](dev-protocol-springcloud-hystrix)
- [dev-protocol-springcloud-hystrix-dashboard](dev-protocol-springcloud-hystrix-dashboard) - [dev-protocol-springcloud-hystrix-dashboard](dev-protocol-springcloud-hystrix-dashboard)
- 消息驱动微服务 - (SpringCloud Stream) - 消息驱动微服务 - (SpringCloud Stream)
- [dev-protocol-springcloud-stream](dev-protocol-springcloud-stream)
- [dev-protocol-springcloud-message-study](dev-protocol-springcloud-message-study) - [dev-protocol-springcloud-message-study](dev-protocol-springcloud-message-study)
- [dev-protocol-springcloud-stream](dev-protocol-springcloud-stream)
- 分布式事务 - (SpringCloud Alibaba Seata) - 分布式事务 - (SpringCloud Alibaba Seata)
- todo - [dev-protocol-springcloud-project-service-config](dev-protocol-springcloud-project-service-config) 通用依赖
- [dev-protocol-springcloud-project-order-service](dev-protocol-springcloud-project-order-service) 应用服务举例
- 网关动态限流 - (SpringCloud Alibaba Sentinel) - 网关动态限流 - (SpringCloud Alibaba Sentinel)
- todo - todo
- 微服务工程部署与整体可用性验证 - 微服务工程部署与整体可用性验证
@ -35,5 +36,5 @@
- 商品微服务 - 商品微服务
- [dev-protocol-springcloud-project-goods-service](dev-protocol-springcloud-project-goods-service) - [dev-protocol-springcloud-project-goods-service](dev-protocol-springcloud-project-goods-service)
- 订单微服务 - 订单微服务
- - [dev-protocol-springcloud-project-order-service](dev-protocol-springcloud-project-order-service)
- 物流微服务 - 物流微服务

@ -35,6 +35,7 @@
- [NacosClientHystrixCommand.java] - [NacosClientHystrixObservableCommand.java] - [NacosClientHystrixCommand.java] - [NacosClientHystrixObservableCommand.java]
### 编程方式开启 Hystrix 请求缓存 ### 编程方式开启 Hystrix 请求缓存
- 先编写过滤器 [HystrixRequestContextServletFilter.java]
- Hystrix 的结果缓存指的是在一次 Hystrix 的请求上下文中 - Hystrix 的结果缓存指的是在一次 Hystrix 的请求上下文中
- Hystrix 请求缓存的两种实现方式 - Hystrix 请求缓存的两种实现方式
- 编程(继承 HystrixCommand)方式,重写 getCacheKey 方法即可 - 编程(继承 HystrixCommand)方式,重写 getCacheKey 方法即可

@ -2,12 +2,12 @@ package org.example.controller;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.example.hystrix.CacheHystrixCommand;
import org.example.hystrix.NacosClientHystrixCommand; import org.example.hystrix.NacosClientHystrixCommand;
import org.example.hystrix.NacosClientHystrixObservableCommand; import org.example.hystrix.NacosClientHystrixObservableCommand;
import org.example.hystrix.UseHystrixCommandAnnotation; import org.example.hystrix.UseHystrixCommandAnnotation;
import org.example.hystrix.request_merge.NacosClientCollapseCommand; import org.example.hystrix.request_merge.NacosClientCollapseCommand;
import org.example.service.NacosClientService4HystrixDemo; import org.example.service.NacosClientService4HystrixDemo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.ServiceInstance;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@ -131,6 +131,41 @@ public class HystrixController {
return result.get(0); // 取一个返回 return result.get(0); // 取一个返回
} }
@GetMapping("/cache-hystrix-command")
public void cacheHystrixCommand(@RequestParam String serviceId) {
// 使用缓存 Command, 连续发起两次请求
CacheHystrixCommand command1 = new CacheHystrixCommand(
nacosClientService4HystrixDemo, serviceId
);
CacheHystrixCommand command2 = new CacheHystrixCommand(
nacosClientService4HystrixDemo, serviceId
);
List<ServiceInstance> result01 = command1.execute();
List<ServiceInstance> result02 = command2.execute();
// 看是否只执行了一次 run 方法
log.info("result01, result02: [{}], [{}]",
JSON.toJSONString(result01), JSON.toJSONString(result02));
// 清除缓存
CacheHystrixCommand.flushRequestCache(serviceId);
// 使用缓存 Command, 发起两次请求
CacheHystrixCommand command3 = new CacheHystrixCommand(
nacosClientService4HystrixDemo, serviceId
);
CacheHystrixCommand command4 = new CacheHystrixCommand(
nacosClientService4HystrixDemo, serviceId
);
List<ServiceInstance> result03 = command3.execute();
List<ServiceInstance> result04 = command4.execute();
// 看是否成功清除缓存
log.info("result03, result04: [{}], [{}]",
JSON.toJSONString(result03), JSON.toJSONString(result04));
}
/*@GetMapping("/cache-hystrix-command") /*@GetMapping("/cache-hystrix-command")
public void cacheHystrixCommand(@RequestParam String serviceId) { public void cacheHystrixCommand(@RequestParam String serviceId) {

@ -49,6 +49,7 @@ public class HystrixRequestContextServletFilter implements Filter {
/** /**
* <h2> Hystrix </h2> * <h2> Hystrix </h2>
* , Sleuth,
* */ * */
public void hystrixConcurrencyStrategyConfig() { public void hystrixConcurrencyStrategyConfig() {
@ -59,7 +60,7 @@ public class HystrixRequestContextServletFilter implements Filter {
HystrixConcurrencyStrategy strategy = HystrixConcurrencyStrategy strategy =
HystrixPlugins.getInstance().getConcurrencyStrategy(); HystrixPlugins.getInstance().getConcurrencyStrategy();
if (strategy instanceof HystrixConcurrencyStrategyDefault) { if (strategy instanceof HystrixConcurrencyStrategyDefault) {
// 如果已经就是我们想要配置的 // 如果已经就是我们想要配置的, 直接返回
return; return;
} }
@ -83,6 +84,7 @@ public class HystrixRequestContextServletFilter implements Filter {
log.info("config hystrix concurrency strategy success"); log.info("config hystrix concurrency strategy success");
} catch (Exception ex) { } catch (Exception ex) {
// 注册失败的可能性很小, 所以用大 catch
log.error("Failed to register Hystrix Concurrency Strategy: [{}]", log.error("Failed to register Hystrix Concurrency Strategy: [{}]",
ex.getMessage(), ex); ex.getMessage(), ex);
} }

@ -0,0 +1,75 @@
package org.example.hystrix;
import com.netflix.hystrix.HystrixCommand;
import com.netflix.hystrix.HystrixCommandGroupKey;
import com.netflix.hystrix.HystrixCommandKey;
import com.netflix.hystrix.HystrixRequestCache;
import com.netflix.hystrix.strategy.concurrency.HystrixConcurrencyStrategyDefault;
import java.util.List;
import lombok.extern.slf4j.Slf4j;
import org.example.service.NacosClientService4HystrixDemo;
import org.springframework.cloud.client.ServiceInstance;
import java.util.Collections;
/**
* <h1> Hystrix</h1>
* */
@Slf4j
public class CacheHystrixCommand extends HystrixCommand<List<ServiceInstance>> {
/** 需要保护的服务 */
private final NacosClientService4HystrixDemo nacosClientService;
/** 方法需要传递的参数 */
private final String serviceId;
private static final HystrixCommandKey CACHED_KEY =
HystrixCommandKey.Factory.asKey("CacheHystrixCommand");
public CacheHystrixCommand(NacosClientService4HystrixDemo nacosClientService, String serviceId) {
super(
HystrixCommand.Setter
.withGroupKey(HystrixCommandGroupKey
.Factory.asKey("CacheHystrixCommandGroup"))
.andCommandKey(CACHED_KEY)
);
this.nacosClientService = nacosClientService;
this.serviceId = serviceId;
}
@Override
protected List<ServiceInstance> run() throws Exception {
log.info("CacheHystrixCommand In Hystrix Command to get service instance:" +
" [{}], [{}]", this.serviceId, Thread.currentThread().getName());
return this.nacosClientService.getNacosClientInfo(this.serviceId);
}
@Override
protected String getCacheKey() {
// fixme 可以进行自定义, 只要保证唯一的请求返回唯一的值即可
return serviceId;
}
@Override
protected List<ServiceInstance> getFallback() {
// todo 这里可以自己添加一些 warning 日志来进行表示
return Collections.emptyList();
}
/**
* <h2> key Hystrix </h2>
* */
public static void flushRequestCache(String serviceId) {
HystrixRequestCache.getInstance(
CACHED_KEY,
HystrixConcurrencyStrategyDefault.getInstance()
).clear(serviceId);
log.info("flush request cache in hystrix command: [{}], [{}]",
serviceId, Thread.currentThread().getName());
}
}

@ -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

@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.example</groupId>
<artifactId>dev-protocol</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>dev-protocol-springcloud-project-order-service</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<!-- 模块名及描述信息 -->
<name>dev-protocol-springcloud-project-order-service</name>
<description>订单服务</description>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- spring cloud alibaba nacos discovery 依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- zipkin = spring-cloud-starter-sleuth + spring-cloud-sleuth-zipkin-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>2.5.0.RELEASE</version>
</dependency>
<!-- Java Persistence API, ORM 规范 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- MySQL 驱动, 注意, 这个需要与 MySQL 版本对应 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.12</version>
<scope>runtime</scope>
</dependency>
<!-- SpringCloud Stream + Kafka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-kafka</artifactId>
</dependency>
<dependency>
<groupId>org.example</groupId>
<artifactId>dev-protocol-springcloud-project-service-config</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.example</groupId>
<artifactId>dev-protocol-springcloud-project-service-sdk</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- 集成 hystrix -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
</dependencies>
<!--
SpringBoot的Maven插件, 能够以Maven的方式为应用提供SpringBoot的支持可以将
SpringBoot应用打包为可执行的jar或war文件, 然后以通常的方式运行SpringBoot应用
-->
<build>
<finalName>${artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

@ -0,0 +1,22 @@
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.openfeign.EnableFeignClients;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
/**
* <h1></h1>
* */
@EnableJpaAuditing
@SpringBootApplication
@EnableCircuitBreaker
@EnableFeignClients
@EnableDiscoveryClient
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
}

@ -0,0 +1,93 @@
server:
port: 8002
servlet:
context-path: /dev-protocol-springcloud-project-order-service
spring:
main:
allow-bean-definition-overriding: true
application:
name: dev-protocol-springcloud-project-order-service
cloud:
stream:
kafka:
binder:
brokers: 127.0.0.1:9092
auto-create-topics: true
bindings:
logisticsOutput:
destination: dev-protocol-topic # kafka topic
content-type: text/plain
alibaba:
seata:
tx-service-group: dev-protocol # seata 全局事务分组
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
# 开启 ribbon 重试机制, 即获取服务失败是否从另外一个节点重试
loadbalancer:
retry:
enabled: true
kafka:
bootstrap-servers: 127.0.0.1:9092
producer:
retries: 3
consumer:
auto-offset-reset: latest
sleuth:
sampler:
probability: 1.0 # 采样比例, 1.0 表示 100%, 默认是 0.1
zipkin:
sender:
type: kafka # 默认是 http
base-url: http://localhost:9411/
jpa:
show-sql: true
hibernate:
ddl-auto: none
properties:
hibernate.show_sql: true
hibernate.format_sql: true
open-in-view: false
datasource:
# 数据源
url: jdbc:mysql://127.0.0.1:3306/dev_protocol_springcloud_project?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
username: root
password: root
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
# 连接池
hikari:
maximum-pool-size: 8
minimum-idle: 4
idle-timeout: 30000
connection-timeout: 30000
max-lifetime: 45000
auto-commit: true
pool-name: devProtocolSpringcloudHikariCP
# feign 相关的配置
feign:
hystrix:
enabled: true # Hystrix 默认是关闭的
client:
config:
default: # 全局的
connectTimeout: 2000 # 默认的连接超时时间是 10s
readTimeout: 5000
# 暴露端点
management:
endpoints:
web:
exposure:
include: '*'
endpoint:
health:
show-details: always

@ -0,0 +1,65 @@
## transaction log store, only used in seata-server
store {
## store mode: file、db、redis
mode = "db"
## file store property
file {
## store location dir
dir = "sessionStore"
# branch session size , if exceeded first try compress lockkey, still exceeded throws exceptions
maxBranchSessionSize = 16384
# globe session size , if exceeded throws exceptions
maxGlobalSessionSize = 512
# file buffer size , if exceeded allocate new buffer
fileWriteBufferCacheSize = 16384
# when recover batch read size
sessionReloadReadSize = 100
# async, sync
flushDiskMode = async
}
## database store property
db {
## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp)/HikariDataSource(hikari) etc.
datasource = "druid"
## mysql/oracle/postgresql/h2/oceanbase etc.
dbType = "mysql"
driverClassName = "com.mysql.jdbc.Driver"
url = "jdbc:mysql://127.0.0.1:3306/seata?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false"
user = "root"
password = "root"
minConn = 5
maxConn = 100
globalTable = "global_table"
branchTable = "branch_table"
lockTable = "lock_table"
queryLimit = 100
maxWait = 5000
}
## redis store property
redis {
host = "127.0.0.1"
port = "6379"
password = ""
database = "0"
minConn = 1
maxConn = 10
maxTotal = 100
queryLimit = 100
}
}
service {
vgroupMapping.imooc-ecommerce = "default"
default.grouplist = "127.0.0.1:8091"
}
client {
async.commit.buffer.limit = 10000
lock {
retry.internal = 10
retry.times = 30
}
}

@ -0,0 +1,20 @@
### 创建订单
POST http://127.0.0.1:9001/dev-protocol-springcloud-gateway/dev-protocol-springcloud-project-order-service/order/create-order
Content-Type: application/json
Accept: application/json
e-commerce-user: eyJhbGciOiJSUzI1NiJ9.eyJlLWNvbW1lcmNlLXVzZXIiOiJ7XCJpZFwiOjEwLFwidXNlcm5hbWVcIjpcIlFpbnlpQGltb29jLmNvbVwifSIsImp0aSI6ImU5OWYzYjdjLTA2YjYtNGQ1Zi1hODY3LWJlMzhjYjlkNDBmZCIsImV4cCI6MTYyODE3OTIwMH0.U9jXZoa9fdQMJQmujN4mkkbtN62cGVy26qhOq_x4QhU8qCqw_NLr2StdAOAAC_FGOF85DHpvDBHCzn9EDCeuq1tBqODjUaLLnWFtTj3oYYSpPZQTG-ZA9OLz8lG8EbcH3URxcaTMElyI8WKoIVccWIHivXTDgNDZOCs6Bir9bBvJJ1Vobgqnb1uV5S7wdHgh89e96-iBy9xCsoQovTcyEOqi8n5cH8cTjMb2XXjT83OhZC1oxhKhkNoTiDOq9VSaYOISQ_tv-XFTICEed4ondW9zfcrbAWdaHb1l8UT5o7nuQOwWkaMckDft9liuTvl6KAe8MjPN9exUqAI5tOC_fA
{
"userAddress": 1,
"orderItems": [
{
"goodsId": 1,
"count": 5
}
]
}
### 查询订单
GET http://127.0.0.1:9001/dev-protocol-springcloud-gateway/dev-protocol-springcloud-project-order-service/order/order-detail?page=2
Accept: application/json
e-commerce-user: eyJhbGciOiJSUzI1NiJ9.eyJlLWNvbW1lcmNlLXVzZXIiOiJ7XCJpZFwiOjEwLFwidXNlcm5hbWVcIjpcIlFpbnlpQGltb29jLmNvbVwifSIsImp0aSI6ImU5OWYzYjdjLTA2YjYtNGQ1Zi1hODY3LWJlMzhjYjlkNDBmZCIsImV4cCI6MTYyODE3OTIwMH0.U9jXZoa9fdQMJQmujN4mkkbtN62cGVy26qhOq_x4QhU8qCqw_NLr2StdAOAAC_FGOF85DHpvDBHCzn9EDCeuq1tBqODjUaLLnWFtTj3oYYSpPZQTG-ZA9OLz8lG8EbcH3URxcaTMElyI8WKoIVccWIHivXTDgNDZOCs6Bir9bBvJJ1Vobgqnb1uV5S7wdHgh89e96-iBy9xCsoQovTcyEOqi8n5cH8cTjMb2XXjT83OhZC1oxhKhkNoTiDOq9VSaYOISQ_tv-XFTICEed4ondW9zfcrbAWdaHb1l8UT5o7nuQOwWkaMckDft9liuTvl6KAe8MjPN9exUqAI5tOC_fA

@ -0,0 +1,17 @@
registry {
# file、nacos、eureka、redis、zk、consul
type = "file"
file {
name = "file.conf"
}
}
config {
type = "file"
file {
name = "file.conf"
}
}

@ -0,0 +1,10 @@
-- 创建 t_ecommerce_order 数据表
CREATE TABLE IF NOT EXISTS `dev_protocol_springcloud_project`.`t_dev_protocol_cloud_order` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`user_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '用户 id',
`address_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '用户地址记录 id',
`order_detail` text NOT NULL COMMENT '订单详情(json 存储, goodsId, count)',
`create_time` datetime NOT NULL DEFAULT '0000-01-01 00:00:00' COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT '0000-01-01 00:00:00' COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用户订单表';

@ -0,0 +1,13 @@
CREATE TABLE `undo_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`branch_id` bigint(20) NOT NULL,
`xid` varchar(100) NOT NULL,
`context` varchar(128) NOT NULL,
`rollback_info` longblob NOT NULL,
`log_status` int(11) NOT NULL,
`log_created` datetime NOT NULL,
`log_modified` datetime NOT NULL,
`ext` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

@ -46,6 +46,23 @@
<artifactId>swagger-bootstrap-ui</artifactId> <artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.3</version> <version>1.9.3</version>
</dependency> </dependency>
<!-- 实现微服务通信 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- seata -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>
<!-- 注册 Seata 数据源需要连接池 -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<optional>true</optional>
</dependency>
</dependencies> </dependencies>
</project> </project>

@ -64,6 +64,7 @@
<module>dev-protocol-springcloud/dev-protocol-springcloud-hystrix</module> <module>dev-protocol-springcloud/dev-protocol-springcloud-hystrix</module>
<module>dev-protocol-springcloud/dev-protocol-springcloud-hystrix-dashboard</module> <module>dev-protocol-springcloud/dev-protocol-springcloud-hystrix-dashboard</module>
<module>dev-protocol-springcloud/dev-protocol-springcloud-message-study</module> <module>dev-protocol-springcloud/dev-protocol-springcloud-message-study</module>
<module>dev-protocol-springcloud/dev-protocol-springcloud-project-order-service</module>
</modules> </modules>
<properties> <properties>

@ -0,0 +1,39 @@
## 1. 傍身技能-服务治理-Nacos负载均衡
### 1.1 走进微服务与Spring Cloud
### 1.2 如何实现服务治理
### 1.3 如何实现负载均衡
## 2. 傍身技能-服务治理-链路追踪,分布式事务
### 2.1 如何实现跨应用的服务间调用
### 2.2 如何实现跨应用的链路追踪
### 2.3 如何实现分布式事务
## 3. 傍身技能-服务治理-限流和容错,配置管理
### 3.1 如何实现服务限流和服务容错
### 3.2 如何实现配置管理
## 4. 傍身技能-服务治理-网关/安全/消息驱动
### 4.1 如何实现轻量级的网关系统
### 4.2 如何实现微服务的安全
### 4.3 如何实现微服务消息驱动

@ -0,0 +1,36 @@
## 1. SpringBoot源码/造轮子/面试
### 1.1 Spring源码概述
### 1.2 Spring Boot架构设计解析
### 1.3 Spring Boot核心源码解析
### 1.4 Spring Boot应用技巧解析
### 1.5 Spring Boot二次改造
### 1.6 Spring Boot造轮子
### 1.7 Spring Boot面试题深度解析
## Spring源码/造轮子/面试
## SpringCould源码/造轮子/面试
## Spring Data源码/造轮子/面试
## Mybatis&Tomcat源码深度解析
## RocketMQ源码/造轮子/面试

@ -0,0 +1,35 @@
# 高潜架构师技法套路6大经典类型架构设计
## 1. 技法套路一:分布式架构设计技法
### 1.1 分布式系统理论
### 1.2 底层数据设计策略 - 分库分表,热点热数据隔离
### 1.3 底层数据设计策略 - 高可用数据
### 1.4 中间件和平台运行期监控
### 1.5 应用层设计
## 2. 技法套路二:微服务架构设计技法
### 2.1 微服务与服务建模
### 2.2 如何统一管理配置信息
### 2.3 如何开展服务监控和调用链路梳理
## 3. 技法套路三Set化架构设计技法
## 4. 技法套路四:服务网格架构设计技法
## 5. 技法套路五DDD领域驱动设计技法
## 6. 技法套路六:响应式架构设计技法

@ -0,0 +1,19 @@
## 大厂架构师级别的项目管理,沟通和复盘秘籍
### 1. 项目管理
### 2. 沟通技能
### 3. 复盘总结
### 4. 面试指导
Loading…
Cancel
Save