2bd1ed4d544937598911383dca702c2de1894f67.svn-base 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. package org.jeecg.handler;
  2. import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.BlockRequestHandler;
  3. import com.alibaba.csp.sentinel.transport.config.TransportConfig;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.cloud.commons.util.InetUtils;
  7. import org.springframework.http.HttpStatus;
  8. import org.springframework.http.MediaType;
  9. import org.springframework.stereotype.Component;
  10. import org.springframework.web.reactive.function.BodyInserters;
  11. import org.springframework.web.reactive.function.server.ServerResponse;
  12. import org.springframework.web.server.ServerWebExchange;
  13. import reactor.core.publisher.Mono;
  14. import javax.annotation.PostConstruct;
  15. /**
  16. * 自定义限流返回信息
  17. * @author Administrator
  18. */
  19. @Slf4j
  20. @Component
  21. public class SentinelBlockRequestHandler implements BlockRequestHandler {
  22. @Autowired
  23. private InetUtils inetUtils;
  24. @PostConstruct
  25. public void doInit() {
  26. System.setProperty(TransportConfig.HEARTBEAT_CLIENT_IP, inetUtils.findFirstNonLoopbackAddress().getHostAddress());
  27. }
  28. @Override
  29. public Mono<ServerResponse> handleRequest(ServerWebExchange exchange, Throwable ex) {
  30. String resultString = "{\"code\":403,\"message\":\"服务开启限流保护,请稍后再试!\"}";
  31. return ServerResponse.status(HttpStatus.TOO_MANY_REQUESTS).contentType(MediaType.APPLICATION_JSON_UTF8).body(BodyInserters.fromObject(resultString));
  32. }
  33. }