手记

Sentinel(2)

控制台相关配置:


在代码中配置Sentinel

定义一个资源名为test-sentinel-api的sentinel资源,当资源被降级或者被限流,会返回对应的字段

所定义的方法,返回值和入参需要一致

    @GetMapping("/test-sentinel-Resource")
    @SentinelResource(value = "test-sentinel-api"
            ,blockHandler = "block"
            ,fallback = "fallback"
            ,blockHandlerClass = TestControllerBlockHandlerClass.class)
    public String testSentinelResource(@RequestParam(required = false) String a){
        Entry entry = null;
        //被保护的逻辑
        if (StringUtils.isBlank(a)){
            throw new IllegalArgumentException("a cannot be null");
        }
            return a;
    }

    /**
     * 1.5:处理降级
     * sentinel1.6后,可以处理Throwable,任何异常都可以走到这里
     * @param a
     * @return
     */
    public String fallback( String a){
        log.warn("降级了fallback");
        return "降级了fallback";
    }
}

package com.itmuch.usercenter.sentineltest;

import com.alibaba.csp.sentinel.slots.block.BlockException;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class TestControllerBlockHandlerClass {
    /**
     * 处理限流或者降级
     * @param a
     * @param e
     * @return
     */
    public static String block(String a , BlockException e) {
        log.warn("限流,或则被降级了block",e);
        return "限流,或则被降级了block";
    }


}

restTemplate整合sentinel

现在配置文件中开启整合sentinel

resttemplate:
  sentinel:
    enabled: true #开启/关闭@SentinelRestTemplate注解

在启动文件中的restTemplate的bean中添加注解@SentinelRestTemplate

public class ContentCenterApplication {

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

    //在spring容器中,创建一个对象,其类型为RestTemplate,名称&ID为restTemplate
    //<bean id="restTemplate" class="xxx.RestTemplate"/>
    @Bean
    @LoadBalanced//为restTemplate整合Ribbon
    @SentinelRestTemplate //为restTemplate整合sentinel
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

}

进入@SentinelRestTemplate注解中可以配置错误信息

@SentinelResource

使用方式类似


feign整合sentinel

先在配置文件中开启整合sentinel(没有提示)

feign:
  sentinel:
    enabled: true #feign整合sentinel


在feign调用的接口中,配置sentinel类

fallback:发生限流或降级会触发逻辑,但不会返回错误信息;

fallbackfactory:发生限流或降级会触发逻辑,并返回错误信息;

这里流控规则设置限流

触发后


0人推荐
随时随地看视频
慕课网APP