使用Sentinel自定義返回和實現(xiàn)區(qū)分來源方式
Sentinel自定義返回和實現(xiàn)區(qū)分來源
1. 自定義錯誤返回
因為流控和降級頁面報的異常都是相同的,所以可以優(yōu)化一下。
使用官方的接口BlockExceptionHandler
(2.2.7.RELEASE)、UrlBlockHandler
(0.9.0.RELEASE)
定義處理類:
@Component public class MyUrlBlockHandler implements BlockExceptionHandler { @Override public void handle(HttpServletRequest httpServletRequest, HttpServletResponse response, BlockException ex) throws Exception { ErrorMsg msg = null; if (ex instanceof FlowException) { msg = ErrorMsg.builder() .status(100) .msg("限流了") .build(); } else if (ex instanceof DegradeException) { msg = ErrorMsg.builder() .status(101) .msg("降級了") .build(); } else if (ex instanceof ParamFlowException) { msg = ErrorMsg.builder() .status(102) .msg("熱點參數(shù)限流") .build(); } else if (ex instanceof SystemBlockException) { msg = ErrorMsg.builder() .status(103) .msg("系統(tǒng)規(guī)則(負載/...不滿足要求)") .build(); } else if (ex instanceof AuthorityException) { msg = ErrorMsg.builder() .status(104) .msg("授權規(guī)則不通過") .build(); } // http狀態(tài)碼 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操作工具,叫jackson new ObjectMapper() .writeValue( response.getWriter(), msg ); } } @Data @Builder @AllArgsConstructor @NoArgsConstructor class ErrorMsg { private Integer status; private String msg; }
效果:
2. 實現(xiàn)區(qū)分來源
使用RequestOriginParser
接口
@Component public class MyRequestOriginParser implements RequestOriginParser { @Override public String parseOrigin(HttpServletRequest request) { // 從請求參數(shù)中獲取名為 origin 的參數(shù)并返回 // 如果獲取不到origin參數(shù),那么就拋異常 String origin = request.getParameter("origin"); if (StringUtils.isBlank(origin)) { throw new IllegalArgumentException("origin must be specified"); } return origin; } }
訪問:http://127.0.0.1:8010/shares/1
控制臺:
加上參數(shù)就可以了:
新加授權規(guī)則
再訪問就不行了:
新增流控規(guī)則
換個名字就不會被限流
真實項目中一般把需要的參數(shù)放在請求header
中
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java String字符串補0或空格的實現(xiàn)代碼
這篇文章主要介紹了Java String字符串補0或空格的實現(xiàn)代碼,代碼簡單易懂,非常不錯,具有參考借鑒價值,感興趣的朋友一起看看吧2016-09-09完美解決springboot中使用mybatis字段不能進行自動映射的問題
今天在springboot中使用mybatis的時候不能字段不能夠進行自動映射,接下來給大家給帶來了完美解決springboot中使用mybatis字段不能進行自動映射的問題,需要的朋友可以參考下2023-05-05java Spring MVC4環(huán)境搭建實例詳解(步驟)
spring WEB MVC框架提供了一個MVC(model-view-controller)模型-視圖-控制器的結構和組件,利用它可以開發(fā)更靈活、松耦合的web應用。MVC模式使得整個服務應用的各部分(控制邏輯、業(yè)務邏輯、UI界面展示)分離開來,使它們之間的耦合性更低2017-08-08詳解Spring注解--@Autowired、@Resource和@Service
本篇文章主要介紹最重要的三個Spring注解,也就是@Autowired、@Resource和@Service,具有很好的參考價值。下面跟著小編一起來看下吧2017-05-05