1. 增加服务保障组件,支持限流、熔断等功能

2. 进一步完善文档
This commit is contained in:
YunaiV
2021-02-24 20:59:09 +08:00
parent 53db9de93d
commit 7c8bfa3443
29 changed files with 126 additions and 39 deletions

View File

@ -1 +1 @@
<http://www.iocoder.cn/Spring-Boot/Async-Job/?dashboard>
<http://www.iocoder.cn/Spring-Boot/Async-Job/?yudao>

View File

@ -0,0 +1 @@
<http://www.iocoder.cn/Spring-Boot/dynamic-datasource/?yudao>

View File

@ -0,0 +1 @@
<http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao>

View File

@ -14,7 +14,7 @@ public class DefaultLockFailureStrategy implements LockFailureStrategy {
@Override
public void onLockFailure(String key, long acquireTimeout, int acquireCount) {
log.debug("[onLockFailure][线程:{} 获取锁失败key:{} 获取超时时长:{} ms]", Thread.currentThread().getName(), key, acquireTimeout);
throw new ServiceException(GlobalErrorCodeConstants.CONCURRENCY_REQUESTS);
throw new ServiceException(GlobalErrorCodeConstants.LOCKED);
}
}

View File

@ -0,0 +1,9 @@
package cn.iocoder.dashboard.framework.monitor;
import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableAdminServer
public class AdminServerConfiguration {
}

View File

@ -0,0 +1,4 @@
/**
* 使用 Spring Boot Admin 实现简单的监控平台
*/
package cn.iocoder.dashboard.framework.monitor;

View File

@ -0,0 +1 @@
<http://www.iocoder.cn/Spring-Boot/Admin/?yudao>

View File

@ -0,0 +1 @@
<http://www.iocoder.cn/Spring-Boot/MyBatis/?yudao>

View File

@ -0,0 +1 @@
<http://www.iocoder.cn/Spring-Boot/Job/?yudao>

View File

@ -0,0 +1,4 @@
/**
* 采用 Spring Data Redis 操作 Redis底层使用 Redisson 作为客户端
*/
package cn.iocoder.dashboard.framework.redis;

View File

@ -0,0 +1 @@
<http://www.iocoder.cn/Spring-Boot/Redis/?yudao>

View File

@ -0,0 +1,9 @@
/**
* 使用 Resilience4j 组件,实现服务保障,包括:
* 1. 熔断器
* 2. 限流器
* 3. 舱壁隔离
* 4. 重试
* 5. 限时器
*/
package cn.iocoder.dashboard.framework.resilience4j;

View File

@ -0,0 +1 @@
<http://www.iocoder.cn/Spring-Boot/Spring-Security/?github>

View File

@ -1,2 +1,2 @@
* 芋道 Spring Security 入门:<http://www.iocoder.cn/Spring-Boot/Spring-Security/?dashboard>
* Spring Security 基本概念:<http://www.iocoder.cn/Fight/Spring-Security-4-1-0-Basic-concept-description/?dashboard>
* 芋道 Spring Security 入门:<http://www.iocoder.cn/Spring-Boot/Spring-Security/?yudao>
* Spring Security 基本概念:<http://www.iocoder.cn/Fight/Spring-Security-4-1-0-Basic-concept-description/?yudao>

View File

@ -1 +1 @@
<http://www.iocoder.cn/Spring-Boot/Swagger/?dashboard>
<http://www.iocoder.cn/Spring-Boot/Swagger/?yudao>

View File

@ -0,0 +1 @@
<http://www.iocoder.cn/Spring-Boot/SkyWalking/?yudao>

View File

@ -0,0 +1,4 @@
/**
* 使用 Hibernate Validator 实现参数校验
*/
package cn.iocoder.dashboard.framework.validator;

View File

@ -0,0 +1 @@
<http://www.iocoder.cn/Spring-Boot/Validation/?yudao>

View File

@ -4,6 +4,7 @@ import cn.iocoder.dashboard.common.exception.GlobalException;
import cn.iocoder.dashboard.common.exception.ServiceException;
import cn.iocoder.dashboard.common.pojo.CommonResult;
import cn.iocoder.dashboard.framework.security.core.util.SecurityUtils;
import io.github.resilience4j.ratelimiter.RequestNotPermitted;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.validation.BindException;
@ -63,6 +64,9 @@ public class GlobalExceptionHandler {
if (ex instanceof HttpRequestMethodNotSupportedException) {
return httpRequestMethodNotSupportedExceptionHandler((HttpRequestMethodNotSupportedException) ex);
}
if (ex instanceof RequestNotPermitted) {
return requestNotPermittedExceptionHandler(request, (RequestNotPermitted) ex);
}
if (ex instanceof ServiceException) {
return serviceExceptionHandler((ServiceException) ex);
}
@ -163,6 +167,15 @@ public class GlobalExceptionHandler {
return CommonResult.error(METHOD_NOT_ALLOWED.getCode(), String.format("请求方法不正确:%s", ex.getMessage()));
}
/**
* 处理 Resilience4j 限流抛出的异常
*/
@ExceptionHandler(value = RequestNotPermitted.class)
public CommonResult<?> requestNotPermittedExceptionHandler(HttpServletRequest req, RequestNotPermitted ex) {
log.warn("[requestNotPermittedExceptionHandler][url({}) 访问过于频繁]", req.getRequestURL(), ex);
return CommonResult.error(TOO_MANY_REQUESTS);
}
/**
* 处理 Spring Security 权限不足的异常
*

View File

@ -1 +1 @@
<http://www.iocoder.cn/Spring-Boot/SpringMVC/?dashboard>
<http://www.iocoder.cn/Spring-Boot/SpringMVC/?yudao>