package org.jeecg.handler; import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.BlockRequestHandler; import com.alibaba.csp.sentinel.transport.config.TransportConfig; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.commons.util.InetUtils; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.stereotype.Component; import org.springframework.web.reactive.function.BodyInserters; import org.springframework.web.reactive.function.server.ServerResponse; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; import javax.annotation.PostConstruct; /** * 自定义限流返回信息 * @author Administrator */ @Slf4j @Component public class SentinelBlockRequestHandler implements BlockRequestHandler { @Autowired private InetUtils inetUtils; @PostConstruct public void doInit() { System.setProperty(TransportConfig.HEARTBEAT_CLIENT_IP, inetUtils.findFirstNonLoopbackAddress().getHostAddress()); } @Override public Mono handleRequest(ServerWebExchange exchange, Throwable ex) { String resultString = "{\"code\":403,\"message\":\"服务开启限流保护,请稍后再试!\"}"; return ServerResponse.status(HttpStatus.TOO_MANY_REQUESTS).contentType(MediaType.APPLICATION_JSON_UTF8).body(BodyInserters.fromObject(resultString)); } }