初始化时吧所有的都用了
This commit is contained in:
parent
cecc7aa181
commit
c8874064f0
22
src/main/java/com/ycwl/basic/config/SchedulerConfig.java
Normal file
22
src/main/java/com/ycwl/basic/config/SchedulerConfig.java
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
package com.ycwl.basic.config;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||||
|
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@EnableScheduling
|
||||||
|
public class SchedulerConfig {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public ThreadPoolTaskScheduler taskScheduler() {
|
||||||
|
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
|
||||||
|
scheduler.setPoolSize(32); // 核心/最大线程数
|
||||||
|
scheduler.setAwaitTerminationSeconds(0); // 空闲线程存活时间(秒)
|
||||||
|
scheduler.setThreadNamePrefix("Scheduler-");
|
||||||
|
scheduler.setAwaitTerminationSeconds(60); // 等待任务终止的时间
|
||||||
|
scheduler.setRemoveOnCancelPolicy(true); // 取消任务后移除线程
|
||||||
|
return scheduler;
|
||||||
|
}
|
||||||
|
}
|
@ -10,17 +10,18 @@ public class FixedRateLimiter implements IRateLimiter {
|
|||||||
private final ScheduledExecutorService scheduler = new ScheduledThreadPoolExecutor(1);
|
private final ScheduledExecutorService scheduler = new ScheduledThreadPoolExecutor(1);
|
||||||
|
|
||||||
public FixedRateLimiter(float maxRequestsPerSecond) {
|
public FixedRateLimiter(float maxRequestsPerSecond) {
|
||||||
int rate = Float.valueOf(1000000 / maxRequestsPerSecond).intValue();
|
semaphore.tryAcquire();
|
||||||
|
int rate = Float.valueOf(1000 / maxRequestsPerSecond).intValue();
|
||||||
scheduler.scheduleAtFixedRate(() -> {
|
scheduler.scheduleAtFixedRate(() -> {
|
||||||
if (semaphore.availablePermits() < 1) {
|
if (semaphore.availablePermits() < 1) {
|
||||||
semaphore.release(1);
|
semaphore.release(1);
|
||||||
}
|
}
|
||||||
}, rate, rate, TimeUnit.NANOSECONDS);
|
}, rate, rate, TimeUnit.MILLISECONDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public FixedRateLimiter(int rate, TimeUnit timeUnit) {
|
public FixedRateLimiter(int rate, TimeUnit timeUnit) {
|
||||||
// 启动一个线程每0.5秒释放一个许可
|
semaphore.tryAcquire();
|
||||||
scheduler.scheduleAtFixedRate(() -> {
|
scheduler.scheduleAtFixedRate(() -> {
|
||||||
if (semaphore.availablePermits() < 1) {
|
if (semaphore.availablePermits() < 1) {
|
||||||
semaphore.release(1);
|
semaphore.release(1);
|
||||||
|
@ -12,6 +12,9 @@ public class SlidingWindowRateLimiter implements IRateLimiter {
|
|||||||
|
|
||||||
public SlidingWindowRateLimiter(int maxRequestsPerSecond) {
|
public SlidingWindowRateLimiter(int maxRequestsPerSecond) {
|
||||||
this.semaphore = new Semaphore(maxRequestsPerSecond);
|
this.semaphore = new Semaphore(maxRequestsPerSecond);
|
||||||
|
for (int i = 0; i < maxRequestsPerSecond; i++) {
|
||||||
|
semaphore.tryAcquire();
|
||||||
|
}
|
||||||
scheduler.scheduleAtFixedRate(() -> {
|
scheduler.scheduleAtFixedRate(() -> {
|
||||||
if (semaphore.availablePermits() < maxRequestsPerSecond) {
|
if (semaphore.availablePermits() < maxRequestsPerSecond) {
|
||||||
semaphore.release(maxRequestsPerSecond - semaphore.availablePermits());
|
semaphore.release(maxRequestsPerSecond - semaphore.availablePermits());
|
||||||
@ -21,6 +24,9 @@ public class SlidingWindowRateLimiter implements IRateLimiter {
|
|||||||
|
|
||||||
public SlidingWindowRateLimiter(int maxRequests, int perSecond) {
|
public SlidingWindowRateLimiter(int maxRequests, int perSecond) {
|
||||||
this.semaphore = new Semaphore(maxRequests);
|
this.semaphore = new Semaphore(maxRequests);
|
||||||
|
for (int i = 0; i < maxRequests; i++) {
|
||||||
|
semaphore.tryAcquire();
|
||||||
|
}
|
||||||
scheduler.scheduleAtFixedRate(() -> {
|
scheduler.scheduleAtFixedRate(() -> {
|
||||||
if (semaphore.availablePermits() < maxRequests) {
|
if (semaphore.availablePermits() < maxRequests) {
|
||||||
semaphore.release(maxRequests - semaphore.availablePermits());
|
semaphore.release(maxRequests - semaphore.availablePermits());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user