控制台相关配置:
在代码中配置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:发生限流或降级会触发逻辑,并返回错误信息;
这里流控规则设置限流
触发后