@RestController
public class RateLimitController {
@GetMapping(value = "/bySentinelResource")
@SentinelResource(value = "bySentinelResource", blockHandler = "bySentinelResource_handler")
public CommonResult bySentinelResource() {
return new CommonResult(200, "bySentinelResource()");
}
public CommonResult bySentinelResource_handler(BlockException e) {
return new CommonResult(400, "bySentinelResource_handler()");
}
}
@GetMapping(value = "/byURLResource")
@SentinelResource(value = "byURLResource")
public CommonResult byURLResource() {
return new CommonResult(200, "byURLResource()");
}
@RestController
public class CustomerBlockHandlerController {
@GetMapping(value = "/customerBlockHandler")
@SentinelResource(value = "customerBlockHandler",
blockHandlerClass = CustomerBlockHandler.class,
blockHandler = "handlerException2")
public CommonResult customerBlockHandler() {
return new CommonResult(200, "customerBlockHandler()");
}
}
@RestController
public class OrderComsumerController {
private static final String str = "http://cloud-alibaba-provider-payment";
@Autowired
private RestTemplate restTemplate;
@GetMapping(value = "/orderController")
@SentinelResource(value = "orderController", fallback = "fallback_orderController")
public CommonResult orderController(@RequestParam(value = "id") Long id) {
CommonResult commonResult = restTemplate.getForObject(str + "/getPayment?id=" + id, CommonResult.class);
if (4 == id) {
throw new IllegalArgumentException("传入参数异常");
} else if (commonResult == null) {
throw new NullPointerException("未查询到 结构");
}
return commonResult;
}
public CommonResult fallback_orderController(@RequestParam(value = "id") Long id,
Throwable throwable) {
return new CommonResult(401, "fallback 兜底方法 : " + throwable);
}
}
@RestController
public class OrderComsumerController {
private static final String str = "http://cloud-alibaba-provider-payment";
@Autowired
private RestTemplate restTemplate;
@GetMapping(value = "/orderController")
@SentinelResource(value = "orderController", blockHandler = "block_orderController")
public CommonResult orderController(@RequestParam(value = "id") Long id) {
CommonResult commonResult = restTemplate.getForObject(str + "/getPayment?id=" + id, CommonResult.class);
if (4 == id) {
throw new IllegalArgumentException("传入参数异常");
} else if (commonResult == null) {
throw new NullPointerException("未查询到 结构");
}
return commonResult;
}
public CommonResult block_orderController(@RequestParam(value = "id") Long id,
BlockException blockException) {
return new CommonResult(402, "blockHandler 限流 降级方法 : " + blockException);
}
}
@RestController
public class OrderComsumerController {
private static final String str = "http://cloud-alibaba-provider-payment";
@Autowired
private RestTemplate restTemplate;
@GetMapping(value = "/orderController")
@SentinelResource(value = "orderController",
fallback = "fallback_orderController",
blockHandler = "block_orderController")
public CommonResult orderController(@RequestParam(value = "id") Long id) {
CommonResult commonResult = restTemplate.getForObject(str + "/getPayment?id=" + id, CommonResult.class);
if (4 == id) {
throw new IllegalArgumentException("传入参数异常");
} else if (commonResult == null) {
throw new NullPointerException("未查询到 结构");
}
return commonResult;
}
public CommonResult fallback_orderController(@RequestParam(value = "id") Long id,
Throwable throwable) {
return new CommonResult(401, "fallback 兜底方法 : " + throwable);
}
public CommonResult block_orderController(@RequestParam(value = "id") Long id,
BlockException blockException) {
return new CommonResult(402, "blockHandler 限流 降级方法 : " + blockException);
}
}
@GetMapping(value = "/orderController")
@SentinelResource(value = "orderController",
fallback = "fallback_orderController",
blockHandler = "block_orderController",
exceptionsToIgnore = {IllegalArgumentException.class})
public CommonResult orderController(@RequestParam(value = "id") Long id) {
CommonResult commonResult = restTemplate.getForObject(str + "/getPayment?id=" + id, CommonResult.class);
if (4 == id) {
throw new IllegalArgumentException("传入参数异常");
} else if (commonResult == null) {
throw new NullPointerException("未查询到 结构");
}
return commonResult;
}
@FeignClient(value = "cloud-alibaba-provider-payment",
fallback = PaymentFallbackService.class)
public interface PaymentService {
@GetMapping(value = "/getPayment")
CommonResult getPayment(@RequestParam(value = "id") Long id);
}
@Component
public class PaymentFallbackService implements PaymentService {
@Override
public CommonResult getPayment(Long id) {
return new CommonResult(401, "fallback_serviceOrder() : " + id);
}
}
@RestController
public class OrderComsumerController_02 {
@Autowired
private PaymentService paymentService;
@GetMapping(value = "/serviceOrderController")
@SentinelResource(value = "serviceOrderController")
public CommonResult serviceOrderController(@RequestParam("id") Long id) {
CommonResult commonResult = paymentService.getPayment(id);
if (4 == id) {
throw new IllegalArgumentException("传入参数异常");
} else if (commonResult == null) {
throw new NullPointerException("未查询到 结构");
}
return commonResult;
}
}
@Component
public class PaymentBlockHandlerService implements PaymentService {
@Override
public CommonResult getPayment(Long id) {
return new CommonResult(402, "blockHandler_serviceOrder() : " + id);
}
}
<!-- 后续 持久化 用到 -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
server:
port: 8401
spring:
application:
name: cloud-alibaba-sentinel-service-8401
cloud:
nacos:
discovery:
server-addr: 114.215.173.88:8848
sentinel:
transport:
# 配置 sentinel dashboard 地址
dashboard: 192.168.43.44:8080
# 默认 以 8719 端口,假如被占用,会自动从 8719 开始,
# 依次 +1 扫描,直到找到未被占用的端口
port: 8719
datasource:
ds1:
nacos:
serverAddr: 114.215.173.88:8848
dataId: ${spring.application.name}
groupId: DEFAULT_GROUP
dataType: json
ruleType: flow
management:
endpoints:
web:
exposure:
include: '*'