0.9.0.RELEASE版本的spring cloud alibaba sentinel+gateway網關實例

  sentinel除了讓服務提供方、消費方用以外,網關也能用它來限流。咱們基於上次整的網關(參見0.9.0.RELEASE版本的spring cloud alibaba nacos+gateway網關實例)來看下怎麼弄。只需動其中的兩板斧:html

  一、pom引入sentinel適配器:java

<dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-spring-cloud-gateway-adapter</artifactId>
            <version>1.6.0</version>
        </dependency>

  二、新增一個配置類:react

import com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayFlowRule; import com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayRuleManager; import com.alibaba.csp.sentinel.adapter.gateway.sc.SentinelGatewayFilter; import com.alibaba.csp.sentinel.adapter.gateway.sc.exception.SentinelGatewayBlockExceptionHandler; import org.springframework.beans.factory.ObjectProvider; import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import org.springframework.http.codec.ServerCodecConfigurer; import org.springframework.web.reactive.result.view.ViewResolver; import javax.annotation.PostConstruct; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; @Configuration public class GatewayConfiguration { private final List<ViewResolver> viewResolvers; private final ServerCodecConfigurer serverCodecConfigurer; public GatewayConfiguration(ObjectProvider<List<ViewResolver>> viewResolversProvider, ServerCodecConfigurer serverCodecConfigurer) { this.viewResolvers = viewResolversProvider.getIfAvailable(Collections::emptyList); this.serverCodecConfigurer = serverCodecConfigurer; } /** * 配置SentinelGatewayBlockExceptionHandler,限流後異常處理 * * @return
     */ @Bean @Order(Ordered.HIGHEST_PRECEDENCE) public SentinelGatewayBlockExceptionHandler sentinelGatewayBlockExceptionHandler() { return new SentinelGatewayBlockExceptionHandler(viewResolvers, serverCodecConfigurer); } @Bean @Order(-1) public GlobalFilter sentinelGatewayFilter() { return new SentinelGatewayFilter(); } @PostConstruct public void doInit() { initGatewayRules(); } /** * 配置限流規則 */
    private void initGatewayRules() { Set<GatewayFlowRule> rules = new HashSet<>(); rules.add(new GatewayFlowRule("lxytrans-consumer") .setCount(4) // 限流閾值
                .setIntervalSec(1) // 統計時間窗口,單位是秒,默認是 1 秒
 ); rules.add(new GatewayFlowRule("lxytrans-provider") .setCount(3) .setIntervalSec(1) ); GatewayRuleManager.loadRules(rules); } }

  打完收功。把網關從新跑起來,咱們依然基於以前的服務提供方和消費方測試,消費方併發5個限1個,提供方併發5個限2個:web

相關文章
相關標籤/搜索