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,20 +67,22 @@ public class SignalKafkaEventWriterService {
public void startWriting() {
while (true) {
SignalKafkaEvent event = take();
if (event == null) {
continue;
}
if (event.getEventType() == EventType.STOP) {
break;
}
List<SignalKafkaEvent> events = drain();
for (SignalKafkaEvent event : events) {
if (event == null) {
continue;
}
if (event.getEventType() == EventType.STOP) {
break;
}
if (event.getEventType() == EventType.WRITE) {
writeSignal(event);
}
if (event.getEventType() == EventType.WRITE) {
writeSignal(event);
}
if (event.getEventType() == EventType.ROTATE) {
rotate();
if (event.getEventType() == EventType.ROTATE) {
rotate();
}
}
}
}
@ -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();
}
}