봄 클라우드 알리바바는 | 센티넬 : 교통 방위 고등 전투 군인 분산 시스템

봄 클라우드 알리바바는 | 센티넬 : 교통 방위 고등 전투 군인 분산 시스템

이 글을 읽기 전에, 그것이 읽을 것을 권장합니다 "봄 클라우드 알리바바를 | 센티넬 : 트래픽 분산 시스템 방어 전투 군인으로" .

1. 센티넬 통합 척하기와 RestTemplate

: 센티넬은 이제 척하기와 RestTemplate 모두, 우리는 척하기를 사용할 때 구성 파일에 센티넬 척하기 지원을 열어야합니다, 해당 의존도를 도입 할 필요가 지원하는 feign.sentinel.enabled=true동시에 가입 할 필요가 openfeign starter에 의존하는 sentinel starter자동화 된 구성 클래스 효과. RestTemplate를 사용하는 경우 당신은 콩의 건설 RestTemplate에 추가해야합니다 @SentinelRestTemplate, 코멘트 RestTemplate에 대한 센티넬의 지원을 엽니 다.

1.1 높은 전초 springcloud을 부모 프로젝트를 만들기 :

부모 프로젝트의 pom.xml은 다음과 같습니다 :

목록이 : 알리바바 / 센티넬 - springcloud 하이 / pom.xml 파일
***

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

공공 센티넬 제어, 서비스 센터를 수행 Nacos의 도입 흐름 않는 구성 요소에 도입했다.

1.2 서브 프로젝트 provider_server 만들기 :

다음과 같이 application.yml 프로필 :

목록이 : 알리바바 / 센티넬 - springcloud 하이 / provider_server / pom.xml 파일
***

server:
  port: 8000
spring:
  application:
    name: spring-cloud-provider-server
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.44.129:8848
    sentinel:
      transport:
        dashboard: localhost:8080
        port: 8720
management:
  endpoints:
    web:
      cors:
        allowed-methods: '*'

인터페이스 테스트 클래스의 HelloController.java은 다음과 같습니다

代码清单: 알리바바 / 전초 springcloud 높이 / provider_server / SRC / 메인 / 자바 / COM / springcloud / provider_server / 컨트롤러 / HelloController.java
***

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello(HttpServletRequest request) {
        return "Hello, port is: " + request.getLocalPort();
    }
}

1.3 하위 프로젝트 consumer_server를 만들 :

다음과 같이 하위 프로젝트의 pom.xml을 사용합니다 :

목록이 : 알리바바 / 센티넬 - springcloud 하이 / consumer_server / pom.xml 파일
***

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

다음과 같이 application.yml 프로필 :

代码清单: 알리바바 / 전초 springcloud 높이 / consumer_server / SRC는 / 메인 / 자원 / application.yml
***

server:
  port: 9000
spring:
  application:
    name: spring-cloud-consumer-server
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.44.129:8848
    sentinel:
      transport:
        dashboard: localhost:8080
        port: 8719
management:
  endpoints:
    web:
      cors:
        allowed-methods: '*'
feign:
  sentinel:
    enabled: true

여기에 사용 feign.sentinel.enabled=true센티넬의 척하기 위해 열려 지원.

인터페이스 테스트 클래스 HelloController.java

代码清单: 알리바바 / 전초 springcloud 높이 / consumer_server / SRC / 메인 / 자바 / COM / springcloud / consumer_server / 컨트롤러 / HelloController.java
***

@RestController
public class HelloController {
    @Autowired
    HelloRemote helloRemote;

    @Autowired
    RestTemplate restTemplate;

    @GetMapping("/helloByFeign")
    public String helloByFeign() {
        return helloRemote.hello();
    }

    @GetMapping("/helloByRestTemplate")
    public String helloByRestTemplate() {
        return restTemplate.getForObject("http://spring-cloud-provider-server/hello/", String.class);
    }
}

센티넬이 통합을 위해 수행 한, 우리는 추가 코멘트없이 척하기 장소를 사용합니다. 동시에, @FeignClient모든 속성의 노트, 센티넬 호환 만들어집니다.

Ch122ConsumerServerApplication.java은 다음 주 클래스를 시작합니다

代码清单: 알리바바 / 전초 springcloud 높이 / consumer_server / SRC / 메인 / 자바 / COM / springcloud / consumer_server / ConsumerServerApplication.java
***

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class Ch122ConsumerServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(Ch122ConsumerServerApplication.class, args);
    }

    @Bean
    @LoadBalanced
    @SentinelRestTemplate
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

}

RestTemplate를 사용하는 경우 증가 될 필요가 @SentinelRestTemplate열린 센티넬의 RestTemplate을 지원합니다.

1.4 테스트

액세스 브라우저를 열고, provider_server 시작 구성을 수정, 엔지니어링 provider_server 및 consumer_server을 시작 두 개의 인스턴스를 시작에 http : // localhost를 : 9000 / helloByFeign 에서 http : // localhost를 : 9000 / helloByRestTemplate , 몇 번 새로 고침 페이지를 볼 수 있습니다 번갈아 디스플레이 Hello, port is: 8000Hello, port is: 8001정상 부하 밸런싱 전류를 나타내는 현재 센티넬 콘솔은, 도시 된 바와 같이 볼 :

1.5 흐름 제어 테스트

스트림이 시점에서, 클러스터 제어 왼쪽을 선택 같이 흐름 제어를 클릭합니다 :

여기에서 우리는 같이 추가를 클릭, 간단한 규칙 1의 구성 QPS 제한을 구성 :

// 로컬 호스트 : 9000 / helloByFeign 및 HTTP : 여기 QPS는, QPS 초당 방문의 숫자가 단순히 그것을 무엇인지 설명하기 위해, 빠른 새로 고침 우리가 여기에 http 시험했을 때 반복 할 필요가 // localhost를 : 9000 / helloByRestTemplate , 상쾌한 과정에서 우리는 페이지가 같은 오류 메시지가 표시됩니다 것을 볼 수있다 : Blocked by Sentinel (flow limiting)우리가 성공을 제한 센티넬을 구성 할 필요가 있다고, 당신이 성공의 수를 볼 수의 센티넬 콘솔을 살펴 보자 우리는 것처럼 액세스를 제한 한 도표 :

2. 서비스 다운 그레이드

요약에서 우리가 사용 센티넬을 척하기와 RestTemplate 통합 도입, 기본적으로, 전류 제한의 성공 후, 센티넬 콘솔 및 제한 성공 QPS 전류 제한했다, 제한 자원의 센티넬 프로세스 제어 직접 던져. 더 나은 서비스를 사용자에게 위해 합리적인 비즈니스 사업 또는 도킹 케이스의 프론트 엔드에서 그렇게 할 수 있지만, 정상적인 상황에서, 제한 된 후에 특별한 치료를 달성, 우리는 무딘 오류를 표시하지 않습니다. 이 섹션에서는, 우리는 서비스 분해 과정을 소개합니다.

2.1 서브 프로젝트를 작성 consumer_fallback

척하기 서비스 저하 클래스 HelloRemoteFallBack.java 다음과 같다 :

代码清单: 알리바바 / 전초 springcloud 높이 / consumer_fallback / SRC / 메인 / 자바 / COM / springcloud / consumer_fallback / 대체 / HelloRemoteFallBack.java
***

@Component
public class HelloRemoteFallBack implements HelloRemote {
    @Override
    public String hello() {
        return "Feign FallBack Msg";
    }
}

상응하여, 현재 제한, 서비스 저하 클래스의 우리의 서비스 저하의 구현을 트리거 다음과 같은 것을 HelloRemote.java의 부분에서 수행하는 그러한 존재하여 구성된 필요합니다 :

代码清单: ch12_2 / ch12_2_consumer_fallback / SRC / 메인 / 자바 / COM / springcloud / 책 / ch12_2_consumer_fallback / 원격 / HelloRemote.java
***

@FeignClient(name = "spring-cloud-provider-server", fallback = HelloRemoteFallBack.class)
public interface HelloRemote {
    @GetMapping("/hello")
    String hello();
}

fallback = HelloRemoteFallBack.class지정 서비스 분해 처리 클래스 HelloRemoteFallBack.class.

RestTemplate 서비스 저하 도구 ExceptionUtil.java 다음과 같다 :

代码清单: 알리바바 / 전초 springcloud 높이 / consumer_fallback / SRC / 메인 / 자바 / COM / springcloud / consumer_fallback / 원격 / HelloRemote.java
***

public class ExceptionUtil {

    private final static Logger logger = LoggerFactory.getLogger(ExceptionUtil.class);

    public static SentinelClientHttpResponse handleException(HttpRequest request, byte[] body, ClientHttpRequestExecution execution, BlockException ex) {
        logger.error(ex.getMessage(), ex);
        return new SentinelClientHttpResponse("RestTemplate FallBack Msg");
    }
}

여기에서도, 우리가 그것을 쓴 후, Ch122ConsumerFallbackApplication.java 코드는 다음과 같다 RestTemplate 트리거 처리기 수준의 서비스 저하의 코드 실행을, 콩의 장소로 등록 RestTemplate을 수정해야합니다 :

代码清单: 알리바바 / 전초 springcloud 높이 / consumer_fallback / SRC / 메인 / 자바 / COM / springcloud / consumer_fallback / ConsumerFallbackApplication.java
***

@Bean
@LoadBalanced
@SentinelRestTemplate(blockHandler = "handleException", blockHandlerClass = ExceptionUtil.class)
public RestTemplate restTemplate() {
    return new RestTemplate();
}

또한, 주목해야 @SentinelRestTemplate주석 속성 (제한 지원 blockHandler, blockHandlerClass) 및 (다운 그레이드 fallback, fallbackClass) 처리.

특징 blockHandler또는 fallback특성에 대응하는 대응 방법이어야 blockHandlerClass또는 fallbackClass정적 속성 방법.

@SentinelRestTemplate제한 사항 ( blockHandler, blockHandlerClass)와 다운 그레이드는 ( fallback, fallbackClass) 속성을 채우기 위해 의무적으로하지 않습니다.

센티넬을 사용하여 통화를 RestTemplate 융합 될 때, 반환 RestTemplate request block by sentinel방법 정보, 또는 방법에 의해 제조 될 수있는 정보에 대응 자체를 반환한다. 여기에 제공 SentinelClientHttpResponse반환 정보를 구성하십시오.

2.2 테스트

순차 시작 provider_server 및 consumer_fallback 두 개의 하위 프로젝트. // 로컬 호스트 : 9090 / helloByFeign 및 HTTP : HTTP에 먼저 대체 브라우저 // localhost를 : 9090 / helloByRestTemplate 한 다음 여기에 제한 할 수 있습니다, 두 개의 인터페이스에 전류 제한 정보를 증가 센티넬 콘솔을 엽니 다 정보 도시 특별히 자원의 스트림에 첨가 :

브라우저에서 새로 고침 두 개의 링크,이 개 제한 정보가 브라우저에서 제대로 표시 할 수 있으며, 테스트에 성공, 같이 우리가 트래픽 통계를-거부 볼 수있는, 다시 센티넬 콘솔을 참조하십시오

제한 3. 센티넬 통합 서비스 게이트웨이

센티넬은 현재 API 게이트웨이가 제한 될 주류 봄 클라우드 게이트웨이, Zuul 등을 지원합니다. 그림과 같이, 공식 차트 봐 :

스루이의 공식보기에서, 우리는 Zuul의 센티넬 봄 클라우드 게이트웨이 성취 세 가지 필터를 통해 주로 제한 볼 수있는 것은 SentinleGatewayFilter하고는 BlockRequestHandler완료.

센티넬 1.6.0 도입 센티넬 API 게이트웨이 어댑터 공통 모듈이 모듈은 게이트웨이 API 및 사용자 정의 개체 및 관리 논리를 제한하는 규칙을 포함 :

  • GatewayFlowRule는 : 게이트웨이는 게이트웨이 장면이 규칙은 다른 경로 또는 사용자 정의 그룹화 API에 대한 제한 할 수있는 요청 매개 변수, 헤더, 소스 IP 등을위한 전류 제한 맞춤형 지원 제한 사용자는 API에 대한 규칙을 제한 .
  • ApiDefinition : API는이 URL을 일치의 조합으로 볼 수있다, 사용자 정의 패킷을 정의합니다. 예를 들어, 우리는 API 아래 그룹화 my_api에에 돌려 my_api라는 API, 요구 된 경로 모드 / foo는 / ** 및 / 바즈 / **을 정의 할 수 있습니다. 전류 제한이 API 사용자 정의 그룹 차원에 대해 제한 할 수있는 경우.

3.1 Zuul 1.x에서

센티넬 Zuul 게이트웨이의 전류 제한 및 리소스 크기를 제공 할 수 Zuul 1.x에서 어댑터 모듈을 제공한다 :

  • 크기 경로 : 즉, 라우팅 엔트리 Spring 설정 파일에 배치 (프록시 RequestContext 필드에 대응하는) 리소스 이름 대응 루트 ID
  • 사용자 정의 API의 치수는 다음 API에서 제공하는 센티넬의 API를 사용하여 사용자가 일부 패킷을 정의

3.1.1 하위 프로젝트를 생성 zuul_server

다음과 같이 프로젝트의 pom.xml을 사용합니다 :

리스팅 : 알리바바 / 센티넬 - springcloud 하이 / zuul_server / pom.xml 파일
***

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-zuul-adapter</artifactId>
</dependency>

여기에 있기 sentinel-zuul-adapter때문에에 포함되지 않은 spring-cloud-starter-alibaba-sentinel별도의 수동을 소개하는 것이 필요.

3.1.2 개요 다음 application.yml :

리스팅 : 알리바바 / 센티넬 - springcloud 하이 / zuul_server / SRC / 메인 / 자원 / application.yml
***

server:
  port: 18080
spring:
  application:
    name: spring-cloud-zuul-server
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.44.129:8848
    sentinel:
      transport:
        dashboard: localhost:8080
        port: 8720
zuul:
  routes:
    consumer-route:
      path: /consumer/**
      serviceId: spring-cloud-consumer-fallback

3.1.3 다운 그레이드 정의 된 클래스 ZuulFallbackProvider.java은 다음과 같습니다

代码清单: 알리바바 / 전초 springcloud 높이 / zuul_server / SRC / 메인 / 자바 / COM / springcloud / zuul_server / 대체 / ZuulFallbackProvider.java
***

public class ZuulFallbackProvider implements ZuulBlockFallbackProvider {
    @Override
    public String getRoute() {
        return "*";
    }

    @Override
    public BlockResponse fallbackResponse(String route, Throwable cause) {
        RecordLog.info(String.format("[Sentinel DefaultBlockFallbackProvider] Run fallback route: %s", route));
        if (cause instanceof BlockException) {
            return new BlockResponse(429, "Sentinel block exception", route);
        } else {
            return new BlockResponse(500, "System Error", route);
        }
    }
}

동시에 3.1.4, 우리는 다음과 같이 센티넬의 3 주입 봄, 구성 클래스를 필터링해야합니다

代码清单: 알리바바 / 전초 springcloud 높이 / zuul_server / SRC / 메인 / 자바 / COM / springcloud / zuul_server / 설정 / ZuulConfig.java
***

@Configuration
public class ZuulConfig {
    @Bean
    public ZuulFilter sentinelZuulPreFilter() {
        // We can also provider the filter order in the constructor.
        return new SentinelZuulPreFilter();
    }

    @Bean
    public ZuulFilter sentinelZuulPostFilter() {
        return new SentinelZuulPostFilter();
    }

    @Bean
    public ZuulFilter sentinelZuulErrorFilter() {
        return new SentinelZuulErrorFilter();
    }

    /**
     * 注册 ZuulFallbackProvider
     */
    @PostConstruct
    public void doInit() {
        ZuulBlockFallbackManager.registerProvider(new ZuulFallbackProvider());
    }

}

궁극적으로, 당신은 증가하기 시작하기 전에 JVM의 시작 매개 변수를 구성해야 -Dcsp.sentinel.app.type=1우리가 API 게이트웨이 유형에 대한 센티넬 콘솔 서비스를 시작 말해.

3.1.5 테스트

HTTP : 순차 엔지니어링 프로모터 provider_server, consumer_fallback, zuul_server는, 액세스 브라우저를 열고 // 로컬 호스트 : 18080 / 소비자 / helloByFeign, 그럼 우리가 zuul_server 서비스를 볼 수있는 센티넬 콘솔을 엽니 다

우리는 여전히 QPS 1, 정책을 제한하는 사용자 정의, 우리가 다시 한 번 설정에 http : // localhost를 : 18080 / 소비자 / helloByFeign 페이지, 다음 페이지가 이미 생산 된 양의 전류 제한 및 디스플레이의 내용을 제한 후 다음과 같습니다 :

{"code":429, "message":"Sentinel block exception", "route":"consumer-route"}

그림과 같이 자원 제한의 정의, 정의를 제한, 잘못된 장소를 정의하지 않는 것이 여기에 있습니다 :

3.2 봄 클라우드 게이트웨이

버전 1.6.0의 시작부터, 센티넬은 봄 클라우드 게이트웨이 어댑터 모듈은 두 개의 자원이 전류 제한 크기를 제공 할 수 있습니다 :

  • 크기 경로 : 즉, 라우팅 엔트리 스프링 구성 파일에 배치 된 대응하는 자원이라는 routeId
  • 사용자 정의 API의 치수는 다음 API에서 제공하는 센티넬의 API를 사용하여 사용자가 일부 패킷을 정의

3.2.1 하위 프로젝트 gateway_server를 만들

다음과 같이 프로젝트의 pom.xml을 사용합니다 :

목록은 : 알리바바 / 센티넬은-springcloud 하이 / gateway_server / pom.xml 파일을
***

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-spring-cloud-gateway-adapter</artifactId>
</dependency>

3.2.2 개요 다음 application.yml :

목록이 : 알리바바 / 센티넬 - springcloud 하이 / gateway_server / SRC / 메인 / 자원 / application.yml
***

server:
  port: 28080
spring:
  application:
    name: spring-cloud-gateway-server
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.44.129:8848
    sentinel:
      transport:
        dashboard: localhost:8080
        port: 8720
    gateway:
      enabled: true
      discovery:
        locator:
          lower-case-service-id: true
      routes:
        - id: consumer_server
          uri: lb://spring-cloud-consumer-fallback
          predicates:
            - Method=GET

3.2.3 글로벌 GatewayConfig.java 다음과 같은 범주 :

이전 우리는 또한 봄의 약 2 센티넬 봄 클라우드 게이트웨이 필터 주입이 필요합니다 하위 섹션과 Zuul : SentinelGatewayFilterSentinelGatewayBlockExceptionHandler, 여기에 많은 장소에서, 센티넬의 v1.6.0의 버전에 봄 클라우드 게이트웨이에 대한 지원을 추가 한 것은 비정상적인, 완벽하지 않기 때문에 치료 SentinelGatewayBlockExceptionHandler만 예외 메시지가 아닌 작가 자신이 다시 구현 우리의 시스템과 다운 스트림에서의 훌륭한 조합으로 반환 할 수 SentinelGatewayBlockExceptionHandler및 이름 JsonSentinelGatewayBlockExceptionHandler, 반환 매개 변수를 JSON으로 정의되며,이 센티넬 제공 주입 더 이상 없습니다 SentinelGatewayBlockExceptionHandler만, 대신 나는 구현을 소유 JsonSentinelGatewayBlockExceptionHandler.

代码清单: 알리바바 / 전초 springcloud 높이 / gateway_server / SRC / 메인 / 자바 / COM / springcloud / gateway_server / 설정 / GatewayConfig.java
***

@Configuration
public class GatewayConfig {
    private final List<ViewResolver> viewResolvers;
    private final ServerCodecConfigurer serverCodecConfigurer;

    public GatewayConfig(ObjectProvider<List<ViewResolver>> viewResolversProvider, ServerCodecConfigurer serverCodecConfigurer) {
        this.viewResolvers = viewResolversProvider.getIfAvailable(Collections::emptyList);
        this.serverCodecConfigurer = serverCodecConfigurer;
    }

    @Bean
    @Order(Ordered.HIGHEST_PRECEDENCE)
    public JsonSentinelGatewayBlockExceptionHandler jsonSentinelGatewayBlockExceptionHandler() {
        // Register the block exception handler for Spring Cloud Gateway.
        return new JsonSentinelGatewayBlockExceptionHandler(viewResolvers, serverCodecConfigurer);
    }

    @Bean
    @Order(-1)
    public GlobalFilter sentinelGatewayFilter() {
        return new SentinelGatewayFilter();
    }
}

3.2.4 클래스 JsonSentinelGatewayBlockExceptionHandler.java 다운 그레이드는 다음과 같습니다 :

代码清单: 알리바바 / 전초 springcloud 높이 / gateway_server / SRC / 메인 / 자바 / COM / springcloud / gateway_server / 예외 / JsonSentinelGatewayBlockExceptionHandler.java
***

public class JsonSentinelGatewayBlockExceptionHandler implements WebExceptionHandler {
    private List<ViewResolver> viewResolvers;
    private List<HttpMessageWriter<?>> messageWriters;

    public JsonSentinelGatewayBlockExceptionHandler(List<ViewResolver> viewResolvers, ServerCodecConfigurer serverCodecConfigurer) {
        this.viewResolvers = viewResolvers;
        this.messageWriters = serverCodecConfigurer.getWriters();
    }

    private Mono<Void> writeResponse(ServerResponse response, ServerWebExchange exchange) {
        ServerHttpResponse serverHttpResponse = exchange.getResponse();
        serverHttpResponse.getHeaders().add("Content-Type", "application/json;charset=UTF-8");
        byte[] datas = "{\"code\":403,\"msg\":\"Sentinel block exception\"}".getBytes(StandardCharsets.UTF_8);
        DataBuffer buffer = serverHttpResponse.bufferFactory().wrap(datas);
        return serverHttpResponse.writeWith(Mono.just(buffer));
    }

    @Override
    public Mono<Void> handle(ServerWebExchange exchange, Throwable ex) {
        if (exchange.getResponse().isCommitted()) {
            return Mono.error(ex);
        }
        // This exception handler only handles rejection by Sentinel.
        if (!BlockException.isBlockException(ex)) {
            return Mono.error(ex);
        }
        return handleBlockedRequest(exchange, ex)
                .flatMap(response -> writeResponse(response, exchange));
    }

    private Mono<ServerResponse> handleBlockedRequest(ServerWebExchange exchange, Throwable throwable) {
        return GatewayCallbackManager.getBlockHandler().handleRequest(exchange, throwable);
    }

    private final Supplier<ServerResponse.Context> contextSupplier = () -> new ServerResponse.Context() {
        @Override
        public List<HttpMessageWriter<?>> messageWriters() {
            return JsonSentinelGatewayBlockExceptionHandler.this.messageWriters;
        }

        @Override
        public List<ViewResolver> viewResolvers() {
            return JsonSentinelGatewayBlockExceptionHandler.this.viewResolvers;
        }
    };
}

난 그냥 다시 작성하는 writeResponse()방법 정보를 반환은, 간단한 변화가 JSON 형식이되었습니다 말을 당신은 독자가 자신의 필요에 따라 수정할 수 있어야합니다.

3.2.5 테스트

순차적 provider_server, consumer_server 및 gateway_server 배치 gateway_server의 JVM 시작 파라미터 시작 -Dcsp.sentinel.app.type=1같이 :

브라우저를 열고 방문에 http : // localhost를 : 28080 / helloByFeign이 정상으로 몇 번 페이지를 반환 새로 고침 Hello, port is: 8000다음 새로 고침, QPS 제한은 1, 트래픽 제한 정책을 구성, 오픈 센티넬 콘솔 브라우저 페이지, 다음, 우리가 볼 수있는 브라우저 정보에 대한 반환을 제한 :

{"code":403,"msg":"Sentinel block exception"}

이 테스트는 성공한 것입니다.

추천

출처www.cnblogs.com/babycomeon/p/11516011.html