欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > Sentinel如何使用BlockExceptionHandler实现限流/降级错误页面显示

Sentinel如何使用BlockExceptionHandler实现限流/降级错误页面显示

2024/10/25 9:34:41 来源:https://blog.csdn.net/yh_zeng2/article/details/140045491  浏览:    关键词:Sentinel如何使用BlockExceptionHandler实现限流/降级错误页面显示

1、修改配置项,打开对Spring MVC端点的保护

spring.cloud.sentinel.filter.enabled=true

2、编写 BlockExceptionHandler的实现类

MyUrlBlockHandler.java
package com.codex.terry.sentinel.urlblockhandler;/*** 文件名称: MyUrlBlockHandler.java* 编写人: yh.zeng* 编写时间: 2024/6/28 13:50* 文件描述: todo*/import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.BlockExceptionHandler;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.authority.AuthorityException;
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeException;
import com.alibaba.csp.sentinel.slots.block.flow.FlowException;
import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowException;
import com.alibaba.csp.sentinel.slots.system.SystemBlockException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@Component
@Slf4j
public class MyUrlBlockHandler implements BlockExceptionHandler
{@Overridepublic void handle(HttpServletRequest request, HttpServletResponse response, BlockException e) throws Exception {ErrorMsg msg = null;if (e instanceof FlowException) {log.error("限流了");msg = ErrorMsg.builder().status(100).msg("限流了").build();} else if (e instanceof DegradeException) {log.error("降级了 ");msg = ErrorMsg.builder().status(101).msg("降级了").build();} else if (e instanceof ParamFlowException) {log.error("热点参数限流");msg = ErrorMsg.builder().status(102).msg("热点参数限流").build();} else if (e instanceof SystemBlockException) {log.error("系统规则(负载/...不满足要求)");msg = ErrorMsg.builder().status(103).msg("系统规则(负载/...不满足要求)").build();} else if (e instanceof AuthorityException) {log.error("授权规则不通过");msg = ErrorMsg.builder().status(104).msg("授权规则不通过").build();}// http状态码response.setStatus(500);response.setCharacterEncoding("utf-8");response.setHeader("Content-Type", "application/json;charset=utf-8");response.setContentType("application/json;charset=utf-8");// spring mvc自带的json操作工具,叫jacksonnew ObjectMapper().writeValue(response.getWriter(),msg);}}@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
class ErrorMsg {private Integer status;private String msg;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com