Drain ivents from queue

This commit is contained in:
Mikhail Trofimov 2026-06-29 15:45:42 +03:00
parent c5ace5e151
commit a3a1debe45

View file

@ -30,6 +30,8 @@ import java.nio.file.StandardCopyOption;
import java.nio.file.StandardOpenOption;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
@ -40,7 +42,7 @@ import java.util.concurrent.TimeUnit;
@Service
public class SignalKafkaEventWriterService {
private final static Charset encoding = Charset.forName("windows-1251");
private final static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
private final static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss"); // TODO убрать время
private final ExecutorService executorService = Executors.newSingleThreadExecutor(
new CustomizableThreadFactory("signal-kafka-event-writer-")
@ -65,7 +67,8 @@ public class SignalKafkaEventWriterService {
public void startWriting() {
while (true) {
SignalKafkaEvent event = take();
List<SignalKafkaEvent> events = drain();
for (SignalKafkaEvent event : events) {
if (event == null) {
continue;
}
@ -82,6 +85,7 @@ public class SignalKafkaEventWriterService {
}
}
}
}
/**
* Записывает сигнал в xml для конкретного пакета
@ -295,13 +299,14 @@ public class SignalKafkaEventWriterService {
.replace("'", "&apos;");
}
private SignalKafkaEvent take() {
private List<SignalKafkaEvent> drain() {
try {
return signalEventsQueue.take();
} catch (InterruptedException e) {
log.error("Error while taking signal event", e);
Thread.currentThread().interrupt();
return null;
List<SignalKafkaEvent> batch = new ArrayList<>(1000);
signalEventsQueue.drainTo(batch, 1000);
return batch;
} catch (Exception e) {
log.error("Error while drain signal events", e);
return Collections.emptyList();
}
}