Modul: cloudalibaba-sentinel-service8401
pom pergantungan baharu
<dependency><!-- 引入自己定义的api通用包,可以使用Payment支付Entity --> <groupId>com.atguigu.springcloud</groupId> <artifactId>cloud-api-common</artifactId> <version>${project.version}</version> </dependency>
Pergantungan ini datang daripada templat anda sendiri, di sini Kebergantungan ini adalah sebahagian daripada pemprosesan perniagaan pertanyaan pangkalan data
Tambah Pengawal
@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 服务不可用"); } }
Konfigurasi grafik dan hubungan kod
bermakna bilangan pertanyaan dalam 1 saat lebih besar daripada 1, jadi kami pergi ke aliran tersuai kami, hadkan aliran
Ujian 1
Klik 1 kali dalam 1 saat , OK
Melebihi di atas, diklik seperti orang gila, mengembalikan maklumat pemprosesan pengehad semasa yang ditentukan sendiri, pengehadan semasa berlaku
Menghadkan arus melalui URL yang diakses akan mengembalikan maklumat pemprosesan pengehad semasa lalai Sentinel sendiri
Pengawal diubah suai kepada:
@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")); } }
Ujian 2
Lawati sekali
http://localhost:8401/rateLimit/byUrl
Biasa
Klik gila http://localhost: 8401/rateLimit/ byUrl
akan mengembalikan hasil pemprosesan pengehad semasa Sentinel sendiri
Masalah yang dihadapi oleh penyelesaian di atas
1 lalai Sistem, tidak Mencerminkan keperluan perniagaan kita sendiri.
2 Mengikut syarat sedia ada, kaedah pemprosesan tersuai kami digabungkan dengan kod perniagaan, yang tidak intuitif.
3 Jika penutup ditambahkan pada setiap kaedah perniagaan, pertambahan kod akan meningkat.
4 Kaedah pemprosesan bersatu global tidak ditunjukkan.
Buat kelas CustomerBlockHandler untuk menyesuaikan logik pemprosesan pengehad semasa
Selepas ujian, kami menyesuaikannya
Tambah baharu perniagaan kepada kelas kawalan
@GetMapping("/rateLimit/customerBlockHandler") @SentinelResource(value = "customerBlockHandler", blockHandlerClass = CustomerBlockHandler.class, blockHandler = "handleException2") public CommonResult customerBlockHandler() { return new CommonResult(200,"按客户自定义限流处理逻辑"); }
Sesuaikan logik pemprosesan mengehadkan arus umum
Ujian 3 Kami menyesuaikannya selepas ujianblockHandlerClass = CustomerBlockHandler.class
blockHandler = handleException2
Atas ialah kandungan terperinci Analisis kod contoh Java @SentinelResource. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!