Sentinel限流之后,默认的响应音讯为Blocked by Sentinel (flow limiting),对于零碎整体性能提醒来说并不对立,参考咱们后面设置的对立响应及异样解决形式,返回雷同的格局的音讯。
1、在自定义Sentinel返回音讯之前,须要调整一下代码构造,因为这里要用到对立返回异样的格局,思考到前期可能的应用问题,这里须要把gitegg-platform-boot工程里定义的对立响应及异样移到新建的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@Componentpublic 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控制台,配置容易呈现限流的规定,关上Jmeter进行测试,咱们能够看到返回音讯曾经是咱们自定义的格局了:
本文源码在https://gitee.com/wmz1930/GitEgg 的chapter-16分支。