1. 更改版本号为1.0.1-alpha

2. 优化缓冲池,当池内没数据时则直接生成
This commit is contained in:
liushaofeng
2020-10-20 09:35:40 +08:00
parent 93db535864
commit ced34c0e3b
2 changed files with 24 additions and 25 deletions
+1 -1
View File
@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>cloud.tianai.captcha</groupId> <groupId>cloud.tianai.captcha</groupId>
<artifactId>tianai-captcha</artifactId> <artifactId>tianai-captcha</artifactId>
<version>1.0</version> <version>1.0.1-alpha</version>
<name>tianai-captcha</name> <name>tianai-captcha</name>
<description>滑块验证码</description> <description>滑块验证码</description>
@@ -1,6 +1,5 @@
package cloud.tianai.captcha.template.slider; package cloud.tianai.captcha.template.slider;
import cloud.tianai.captcha.template.slider.exception.SliderCaptchaException;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -13,10 +12,14 @@ import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
/**
* @Author: 天爱有情
* @date 2020/10/20 9:23
* @Description 滑块验证码缓冲器
*/
@Slf4j @Slf4j
public class CacheSliderCaptchaTemplate implements SliderCaptchaTemplate { public class CacheSliderCaptchaTemplate implements SliderCaptchaTemplate {
public static final int RETRY = 10;
private final ScheduledExecutorService scheduledExecutor = new ScheduledThreadPoolExecutor(1, new NamedThreadFactory("slider-captcha-queue")); private final ScheduledExecutorService scheduledExecutor = new ScheduledThreadPoolExecutor(1, new NamedThreadFactory("slider-captcha-queue"));
private ConcurrentLinkedQueue<SliderCaptchaInfo> queue; private ConcurrentLinkedQueue<SliderCaptchaInfo> queue;
private AtomicInteger pos = new AtomicInteger(0); private AtomicInteger pos = new AtomicInteger(0);
@@ -65,15 +68,11 @@ public class CacheSliderCaptchaTemplate implements SliderCaptchaTemplate {
@SneakyThrows @SneakyThrows
@Override @Override
public SliderCaptchaInfo getSlideImageInfo() { public SliderCaptchaInfo getSlideImageInfo() {
SliderCaptchaInfo poll; SliderCaptchaInfo poll = queue.poll();
int retryIdx = 0; if (poll == null) {
while ((poll = queue.poll()) == null) { log.warn("滑块验证码缓存不足");
retryIdx++; // 如果池内没数据, 则直接生成
if (retryIdx > RETRY) { return target.getSlideImageInfo();
throw new SliderCaptchaException("获取滑块验证码限流");
}
// 休眠50毫秒
TimeUnit.MILLISECONDS.sleep(50);
} }
// 减1 // 减1
pos.decrementAndGet(); pos.decrementAndGet();
@@ -81,19 +80,19 @@ public class CacheSliderCaptchaTemplate implements SliderCaptchaTemplate {
} }
public static void main(String[] args) throws InterruptedException { // public static void main(String[] args) throws InterruptedException {
SliderCaptchaTemplate captchaTemplate = new DefaultSliderCaptchaTemplate("jpeg", "png", true); // SliderCaptchaTemplate captchaTemplate = new DefaultSliderCaptchaTemplate("jpeg", "png", true);
//
captchaTemplate = new CacheSliderCaptchaTemplate(captchaTemplate, 20); // captchaTemplate = new CacheSliderCaptchaTemplate(captchaTemplate, 20);
TimeUnit.SECONDS.sleep(5); // TimeUnit.SECONDS.sleep(5);
for (int i = 0; i < 100; i++) { // for (int i = 0; i < 100; i++) {
long start = System.currentTimeMillis(); // long start = System.currentTimeMillis();
SliderCaptchaInfo info = captchaTemplate.getSlideImageInfo(); // SliderCaptchaInfo info = captchaTemplate.getSlideImageInfo();
long end = System.currentTimeMillis(); // long end = System.currentTimeMillis();
System.out.println("耗时:" + (end - start)); // System.out.println("耗时:" + (end - start));
TimeUnit.MILLISECONDS.sleep(10); // TimeUnit.MILLISECONDS.sleep(10);
} // }
} // }
@Override @Override
public void addResource(URL url) { public void addResource(URL url) {