![JAR search and dependency download from the Maven repository](/logo.png)
com.github.ltsopensource.jobclient.support.JobSubmitProtector Maven / Gradle / Ivy
package com.github.ltsopensource.jobclient.support;
import com.github.ltsopensource.core.commons.concurrent.limiter.RateLimiter;
import com.github.ltsopensource.core.constant.Constants;
import com.github.ltsopensource.core.constant.ExtConfig;
import com.github.ltsopensource.core.domain.Job;
import com.github.ltsopensource.core.exception.JobSubmitException;
import com.github.ltsopensource.jobclient.domain.JobClientAppContext;
import com.github.ltsopensource.jobclient.domain.Response;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
* 用来处理客户端请求过载问题
*
* @author Robert HG ([email protected]) on 5/21/15.
*/
public class JobSubmitProtector {
private int maxQPS;
// 用信号量进行过载保护
RateLimiter rateLimiter;
private int acquireTimeout = 100;
private String errorMsg;
public JobSubmitProtector(JobClientAppContext appContext) {
this.maxQPS = appContext.getConfig().getParameter(ExtConfig.JOB_SUBMIT_MAX_QPS,
Constants.DEFAULT_JOB_SUBMIT_MAX_QPS);
if (this.maxQPS < 10) {
this.maxQPS = Constants.DEFAULT_JOB_SUBMIT_MAX_QPS;
}
this.errorMsg = "the maxQPS is " + maxQPS +
" , submit too fast , use " + ExtConfig.JOB_SUBMIT_MAX_QPS +
" can change the concurrent size .";
this.acquireTimeout = appContext.getConfig().getParameter(ExtConfig.JOB_SUBMIT_LOCK_ACQUIRE_TIMEOUT, 100);
this.rateLimiter = RateLimiter.create(this.maxQPS);
}
public Response execute(final List jobs, final JobSubmitExecutor jobSubmitExecutor) throws JobSubmitException {
if (!rateLimiter.tryAcquire(acquireTimeout, TimeUnit.MILLISECONDS)) {
throw new JobSubmitProtectException(maxQPS, errorMsg);
}
return jobSubmitExecutor.execute(jobs);
}
public int getMaxQPS() {
return maxQPS;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy