根据URL限流
我们还可以通过访问的URL来限流,会返回默认的限流处理信息。
在Sentinel控制台配置流控规则,使用访问的URL:
多次访问该接口,会返回默认的限流处理结果:http://localhost:8401/rateLimit/byUrl
自定义限流处理逻辑
我们可以自定义通用的限流处理逻辑,然后在@SentinelResource中指定。
创建CustomBlockHandler类用于自定义限流处理逻辑:
public class CustomBlockHandler {
public Result handleException(BlockException exception) {
return new Result(“自定义限流信息”, 200);
}
}
在RateLimitController中使用自定义限流处理逻辑:
@RestController
@RequestMapping(“/rateLimit”)
public class RateLimitController {
/**
- 自定义通用的限流处理逻辑
*/
@GetMapping(“/customBlockHandler”)
@SentinelResource(value = “customBlockHandler”, blockHandler = “handleException”, blockHandlerClass = CustomBlockHandler.class)
public Result blockHandler() {
return new Result(“限流成功”, 200);
}
}
Sentinel 支持对服务间调用进行保护,对故障应用进行熔断操作,这里我们使用RestTemplate来调用nacos-user-service服务所提供的接口来演示下该功能。
首先我们需要使用@SentinelRestTemplate来包装下RestTemplate实例:
@Bean
@LoadBalanced
@SentinelRestTemplate
public RestTemplate restTemplate() {
return new RestTemplate();
}
添加CircleBreakerController类,定义对nacos-user-service提供接口的调用:
@RestController
@RequestMapping(“/breaker”)
public class CircleBreakerController {
private static final Logger LOGGER = LoggerFactory.getLogger(CircleBreakerController.class);
@Autowired
private RestTemplate restTemplate;
@Value(“${service-url.user-service}”)
private String userServiceUrl;
@GetMapping(“/fallback/{id}”)
// @SentinelResource(value = “fallback”, fallback = “handleFallback”)
public Result fallback(@PathVariable Long id) {
Result forObject = restTemplate.getForObject(us