Configurable tasks poll interval; task processing timing
This commit is contained in:
parent
f5e816923d
commit
8c959232d4
@ -1898,6 +1898,8 @@ queue:
|
|||||||
# Statistics printing interval for Edge services
|
# Statistics printing interval for Edge services
|
||||||
print-interval-ms: "${TB_QUEUE_EDGE_STATS_PRINT_INTERVAL_MS:60000}"
|
print-interval-ms: "${TB_QUEUE_EDGE_STATS_PRINT_INTERVAL_MS:60000}"
|
||||||
tasks:
|
tasks:
|
||||||
|
# Poll interval in milliseconds for tasks topics
|
||||||
|
poll_interval: "${TB_QUEUE_TASKS_POLL_INTERVAL_MS:500}"
|
||||||
# Partitions count for tasks queues
|
# Partitions count for tasks queues
|
||||||
partitions: "${TB_QUEUE_TASKS_PARTITIONS:12}"
|
partitions: "${TB_QUEUE_TASKS_PARTITIONS:12}"
|
||||||
# Custom partitions count for tasks queues per type. Format: 'TYPE1:24;TYPE2:36', e.g. 'CF_REPROCESSING:24;TENANT_EXPORT:6'
|
# Custom partitions count for tasks queues per type. Format: 'TYPE1:24;TYPE2:36', e.g. 'CF_REPROCESSING:24;TENANT_EXPORT:6'
|
||||||
|
|||||||
@ -20,6 +20,7 @@ import jakarta.annotation.PreDestroy;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.context.event.EventListener;
|
import org.springframework.context.event.EventListener;
|
||||||
import org.thingsboard.common.util.JacksonUtil;
|
import org.thingsboard.common.util.JacksonUtil;
|
||||||
import org.thingsboard.common.util.SetCache;
|
import org.thingsboard.common.util.SetCache;
|
||||||
@ -61,6 +62,9 @@ public abstract class TaskProcessor<T extends Task<R>, R extends TaskResult> {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private TaskProcessorExecutors executors;
|
private TaskProcessorExecutors executors;
|
||||||
|
|
||||||
|
@Value("${queue.tasks.poll_interval:500}")
|
||||||
|
private int pollInterval;
|
||||||
|
|
||||||
private QueueKey queueKey;
|
private QueueKey queueKey;
|
||||||
private MainQueueConsumerManager<TbProtoQueueMsg<TaskProto>, QueueConfig> taskConsumer;
|
private MainQueueConsumerManager<TbProtoQueueMsg<TaskProto>, QueueConfig> taskConsumer;
|
||||||
private final ExecutorService taskExecutor = Executors.newCachedThreadPool(ThingsBoardThreadFactory.forName(getJobType().name().toLowerCase() + "-task-processor"));
|
private final ExecutorService taskExecutor = Executors.newCachedThreadPool(ThingsBoardThreadFactory.forName(getJobType().name().toLowerCase() + "-task-processor"));
|
||||||
@ -73,7 +77,7 @@ public abstract class TaskProcessor<T extends Task<R>, R extends TaskResult> {
|
|||||||
queueKey = new QueueKey(ServiceType.TASK_PROCESSOR, getJobType().name());
|
queueKey = new QueueKey(ServiceType.TASK_PROCESSOR, getJobType().name());
|
||||||
taskConsumer = MainQueueConsumerManager.<TbProtoQueueMsg<TaskProto>, QueueConfig>builder()
|
taskConsumer = MainQueueConsumerManager.<TbProtoQueueMsg<TaskProto>, QueueConfig>builder()
|
||||||
.queueKey(queueKey)
|
.queueKey(queueKey)
|
||||||
.config(QueueConfig.of(true, 500))
|
.config(QueueConfig.of(true, pollInterval))
|
||||||
.msgPackProcessor(this::processMsgs)
|
.msgPackProcessor(this::processMsgs)
|
||||||
.consumerCreator((queueConfig, tpi) -> queueFactory.createTaskConsumer(getJobType()))
|
.consumerCreator((queueConfig, tpi) -> queueFactory.createTaskConsumer(getJobType()))
|
||||||
.consumerExecutor(executors.getConsumersExecutor())
|
.consumerExecutor(executors.getConsumersExecutor())
|
||||||
@ -96,14 +100,14 @@ public abstract class TaskProcessor<T extends Task<R>, R extends TaskResult> {
|
|||||||
switch (entityId.getEntityType()) {
|
switch (entityId.getEntityType()) {
|
||||||
case JOB -> {
|
case JOB -> {
|
||||||
if (event.getEvent() == ComponentLifecycleEvent.STOPPED) {
|
if (event.getEvent() == ComponentLifecycleEvent.STOPPED) {
|
||||||
log.debug("Adding job {} to discarded", entityId);
|
log.info("Adding job {} to discarded", entityId);
|
||||||
addToDiscardedJobs(entityId.getId());
|
addToDiscardedJobs(entityId.getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case TENANT -> {
|
case TENANT -> {
|
||||||
if (event.getEvent() == ComponentLifecycleEvent.DELETED) {
|
if (event.getEvent() == ComponentLifecycleEvent.DELETED) {
|
||||||
deletedTenants.add(entityId.getId());
|
deletedTenants.add(entityId.getId());
|
||||||
log.debug("Adding tenant {} to deleted", entityId);
|
log.info("Adding tenant {} to deleted", entityId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -134,9 +138,10 @@ public abstract class TaskProcessor<T extends Task<R>, R extends TaskResult> {
|
|||||||
|
|
||||||
private void processTask(T task) throws InterruptedException {
|
private void processTask(T task) throws InterruptedException {
|
||||||
task.setAttempt(task.getAttempt() + 1);
|
task.setAttempt(task.getAttempt() + 1);
|
||||||
log.info("Processing task: {}", task);
|
log.debug("Processing task: {}", task);
|
||||||
Future<R> future = null;
|
Future<R> future = null;
|
||||||
try {
|
try {
|
||||||
|
long startNs = System.nanoTime();
|
||||||
future = taskExecutor.submit(() -> process(task));
|
future = taskExecutor.submit(() -> process(task));
|
||||||
R result;
|
R result;
|
||||||
try {
|
try {
|
||||||
@ -146,6 +151,8 @@ public abstract class TaskProcessor<T extends Task<R>, R extends TaskResult> {
|
|||||||
} catch (TimeoutException e) {
|
} catch (TimeoutException e) {
|
||||||
throw new TimeoutException("Timeout after " + getTaskProcessingTimeout() + " ms");
|
throw new TimeoutException("Timeout after " + getTaskProcessingTimeout() + " ms");
|
||||||
}
|
}
|
||||||
|
long timingNs = System.nanoTime() - startNs;
|
||||||
|
log.info("Processed task in {} ms: {}", timingNs / 1000000.0, task);
|
||||||
reportTaskResult(task, result);
|
reportTaskResult(task, result);
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
throw e;
|
throw e;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user