乐趣区

关于vue.js:SpringCloud微服务实战搭建企业级开发框架十六集成Sentinel高可用流量管理框架自定义返回消息

  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
@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 控制台,配置容易呈现限流的规定,关上 Jmeter 进行测试,咱们能够看到返回音讯曾经是咱们自定义的格局了:

本文源码在 https://gitee.com/wmz1930/GitEgg 的 chapter-16 分支。

退出移动版