Sentinel限流之后群井,默認(rèn)的響應(yīng)消息為Blocked by Sentinel (flow limiting)氏义,對于系統(tǒng)整體功能提示來說并不統(tǒng)一,參考我們前面設(shè)置的統(tǒng)一響應(yīng)及異常處理方式愉镰,返回相同的格式的消息纵装。
1、在自定義Sentinel返回消息之前扇苞,需要調(diào)整一下代碼結(jié)構(gòu)欺殿,因?yàn)檫@里要用到統(tǒng)一返回異常的格式,考慮到后期可能的使用問題鳖敷,這里需要把gitegg-platform-boot工程里定義的統(tǒng)一響應(yīng)及異常移到新建的gitegg-platform-base通用定義工程里面脖苏,同時在gitegg-platform-cloud中引入gitegg-platform-base和spring-boot-starter-web
<!-- 為了使用HttpServletRequest和HttpServletResponse -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.gitegg.platform</groupId>
<artifactId>gitegg-platform-base</artifactId>
</dependency>
2、在GitEgg-Platform子工程gitegg-platform-cloud中自定義Sentinel錯誤處理類GitEggBlockExceptionHandler.java:
package com.gitegg.platform.cloud.sentinel.handler;
import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.BlockExceptionHandler;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.gitegg.platform.base.enums.ResultCodeEnum;
import com.gitegg.platform.base.result.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 自定義異常處理器
*/
@Slf4j
@Component
public class GitEggBlockExceptionHandler implements BlockExceptionHandler {
@Override
public void handle(HttpServletRequest request, HttpServletResponse response, BlockException e) throws Exception {
response.setStatus(429);
response.setContentType("application/json;charset=utf-8");
Result result = Result.error(ResultCodeEnum.SYSTEM_BUSY, ResultCodeEnum.SYSTEM_BUSY.getMsg());
new ObjectMapper().writeValue(response.getWriter(), result);
}
}
3定踱、配置Sentinel控制臺棍潘,配置容易出現(xiàn)限流的規(guī)則,打開Jmeter進(jìn)行測試崖媚,我們可以看到返回消息已經(jīng)是我們自定義的格式了:
image.png
本文源碼在https://gitee.com/wmz1930/GitEgg 的chapter-16分支亦歉。
GitEgg-Cloud是一款基于SpringCloud整合搭建的企業(yè)級微服務(wù)應(yīng)用開發(fā)框架,開源項(xiàng)目地址:
Gitee: https://gitee.com/wmz1930/GitEgg
GitHub: https://github.com/wmz1930/GitEgg
歡迎感興趣的小伙伴Star支持一下畅哑。