모듈: cloudalibaba-sentinel-service8401
pom 새 종속성
<dependency><!-- 引入自己定义的api通用包,可以使用Payment支付Entity --> <groupId>com.atguigu.springcloud</groupId> <artifactId>cloud-api-common</artifactId> <version>${project.version}</version> </dependency>
이 종속성은 자체 템플릿에서 발생합니다. 여기서 이 종속성은 데이터베이스 쿼리의 비즈니스 처리의 일부입니다
New Controller
@RestController public class RateLimitController { @GetMapping("/byResource") @SentinelResource(value = "byResource",blockHandler = "handleException") public CommonResult byResource() { return new CommonResult(200,"按资源名称限流测试OK",new Payment(2020L,"serial001")); } public CommonResult handleException(BlockException exception) { return new CommonResult(444,exception.getClass().getCanonicalName()+"\t 服务不可用"); } }
그래픽 구성 및 코드 관계
는 1초당 쿼리 수가 1보다 크다는 의미이므로 맞춤 흐름으로 이동하여 흐름을 제한합니다
테스트 1
1클릭 1초만에 OK
위를 초과해서 미친듯이 클릭했더니 자체 정의된 전류 제한 처리 정보가 반환되었습니다
를 통해 전류를 제한하는 URL, Sentinel이 반환됩니다. 기본 전류 제한 처리 정보와 함께 제공됩니다.
컨트롤러 수정:
@RestController public class RateLimitController { @GetMapping("/byResource") @SentinelResource(value = "byResource",blockHandler = "handleException") public CommonResult byResource() { return new CommonResult(200,"按资源名称限流测试OK",new Payment(2020L,"serial001")); } public CommonResult handleException(BlockException exception) { return new CommonResult(444,exception.getClass().getCanonicalName()+"\t 服务不可用"); } @GetMapping("/rateLimit/byUrl") @SentinelResource(value = "byUrl") public CommonResult byUrl() { return new CommonResult(200,"按url限流测试OK",new Payment(2020L,"serial002")); } }
Test 2
한 번 방문
http://localhost:8401/rateLimit/byUrl
Normal
미친듯이 클릭하면 http://localhost:8401/rateLimit/byUrl
가 Sentinel의 현재 제한 처리 결과를 반환합니다.
위 솔루션이 직면한 문제
1 시스템 기본값은 우리 자신의 비즈니스를 반영하지 않습니다. 요구 사항.
2 기존 여건에 따라 당사의 맞춤형 처리 방식이 비즈니스 코드와 결합되어 있어 직관적이지 않습니다.
3 각 업무 방식에 표지를 추가하면 코드 블로트가 늘어납니다.
4 글로벌 통일 처리 방식은 반영되지 않습니다.
한류 처리 로직 커스터마이징을 위한 CustomerBlockHandler 클래스 생성
테스트 후 커스터마이징
컨트롤 클래스에 새로운 비즈니스 추가
@GetMapping("/rateLimit/customerBlockHandler") @SentinelResource(value = "customerBlockHandler", blockHandlerClass = CustomerBlockHandler.class, blockHandler = "handleException2") public CommonResult customerBlockHandler() { return new CommonResult(200,"按客户自定义限流处理逻辑"); }
일반 한류 처리 로직 커스터마이징
blockHandlerClass = CustomerBlockHandler.class
blockHandler = handlerException2
위 구성: CustomerBlockHandler 클래스에서 handlerException2 메소드를 찾아 일반적인 전류 제한 처리 논리를 처리하고 정의합니다.
테스트 3
테스트 드디어 맞춤설정이 완료되었습니다
위 내용은 Java @SentinelResource 예제 코드 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!