Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
80efd4af2e | ||
|
|
f22d1397cc | ||
|
|
0996c8cd71 | ||
|
|
0a6090babe |
@ -14,8 +14,8 @@ dependencies {
|
|||||||
api("net.sourceforge.tess4j:tess4j:5.8.0")
|
api("net.sourceforge.tess4j:tess4j:5.8.0")
|
||||||
api("com.iqser.red.commons:metric-commons:2.1.0")
|
api("com.iqser.red.commons:metric-commons:2.1.0")
|
||||||
api("com.iqser.red.commons:storage-commons:2.45.0")
|
api("com.iqser.red.commons:storage-commons:2.45.0")
|
||||||
api("com.knecon.fforesight:tenant-commons:0.21.0")
|
|
||||||
api("com.knecon.fforesight:lifecycle-commons:0.6.0")
|
api("com.knecon.fforesight:lifecycle-commons:0.6.0")
|
||||||
|
api("com.knecon.fforesight:tenant-commons:0.26.0")
|
||||||
api("com.pdftron:PDFNet:10.5.0")
|
api("com.pdftron:PDFNet:10.5.0")
|
||||||
api("org.apache.pdfbox:pdfbox:3.0.0")
|
api("org.apache.pdfbox:pdfbox:3.0.0")
|
||||||
api("org.apache.pdfbox:jbig2-imageio:3.0.4")
|
api("org.apache.pdfbox:jbig2-imageio:3.0.4")
|
||||||
|
|||||||
@ -14,7 +14,7 @@ import com.iqser.red.pdftronlogic.commons.InvisibleElementRemovalService;
|
|||||||
import com.iqser.red.pdftronlogic.commons.WatermarkRemovalService;
|
import com.iqser.red.pdftronlogic.commons.WatermarkRemovalService;
|
||||||
import com.knecon.fforesight.lifecyclecommons.LifecycleAutoconfiguration;
|
import com.knecon.fforesight.lifecyclecommons.LifecycleAutoconfiguration;
|
||||||
import com.knecon.fforesight.service.ocr.processor.OcrServiceProcessorConfiguration;
|
import com.knecon.fforesight.service.ocr.processor.OcrServiceProcessorConfiguration;
|
||||||
import com.knecon.fforesight.service.ocr.v1.server.queue.MessagingConfiguration;
|
import com.knecon.fforesight.service.ocr.v1.server.configuration.MessagingConfiguration;
|
||||||
import com.iqser.red.storage.commons.StorageAutoConfiguration;
|
import com.iqser.red.storage.commons.StorageAutoConfiguration;
|
||||||
import com.knecon.fforesight.tenantcommons.MultiTenancyAutoConfiguration;
|
import com.knecon.fforesight.tenantcommons.MultiTenancyAutoConfiguration;
|
||||||
import com.knecon.fforesight.tracing.OpenTelemetryConfig;
|
import com.knecon.fforesight.tracing.OpenTelemetryConfig;
|
||||||
|
|||||||
@ -0,0 +1,23 @@
|
|||||||
|
package com.knecon.fforesight.service.ocr.v1.server.configuration;
|
||||||
|
|
||||||
|
import org.springframework.amqp.core.Queue;
|
||||||
|
import org.springframework.amqp.core.QueueBuilder;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class MessagingConfiguration {
|
||||||
|
|
||||||
|
public static final String OCR_REQUEST_QUEUE_PREFIX = "ocr_request_queue";
|
||||||
|
public static final String OCR_REQUEST_EXCHANGE = "ocr_request_exchange";
|
||||||
|
public static final String OCR_DLQ = "ocr_dlq";
|
||||||
|
public static final String OCR_RESPONSE_EXCHANGE = "ocr_response_exchange";
|
||||||
|
public static final String OCR_STATUS_UPDATE_EXCHANGE = "ocr_status_update_exchange";
|
||||||
|
public static final String OCR_STATUS_UPDATE_DLQ = "ocr_status_update_dlq";
|
||||||
|
|
||||||
|
public static final String X_ERROR_INFO_HEADER = "x-error-message";
|
||||||
|
public static final String X_ERROR_INFO_TIMESTAMP_HEADER = "x-error-message-timestamp";
|
||||||
|
}
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
package com.knecon.fforesight.service.ocr.v1.server.configuration;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
import com.knecon.fforesight.tenantcommons.queue.TenantMessagingConfiguration;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class TenantMessagingConfigurationImpl extends TenantMessagingConfiguration {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,20 +0,0 @@
|
|||||||
package com.knecon.fforesight.service.ocr.v1.server.queue;
|
|
||||||
|
|
||||||
import org.springframework.amqp.core.Queue;
|
|
||||||
import org.springframework.amqp.core.QueueBuilder;
|
|
||||||
import org.springframework.context.annotation.Bean;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
|
|
||||||
@Configuration
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
public class MessagingConfiguration {
|
|
||||||
|
|
||||||
public static final String OCR_REQUEST_QUEUE = "ocr_request_queue";
|
|
||||||
public static final String OCR_RESPONSE_QUEUE = "ocr_response_queue";
|
|
||||||
public static final String OCR_STATUS_UPDATE_RESPONSE_QUEUE = "ocr_status_update_response_queue";
|
|
||||||
public static final String X_ERROR_INFO_HEADER = "x-error-message";
|
|
||||||
public static final String X_ERROR_INFO_TIMESTAMP_HEADER = "x-error-message-timestamp";
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -6,6 +6,9 @@ import org.springframework.stereotype.Service;
|
|||||||
|
|
||||||
import com.knecon.fforesight.service.ocr.processor.service.IOcrMessageSender;
|
import com.knecon.fforesight.service.ocr.processor.service.IOcrMessageSender;
|
||||||
import com.knecon.fforesight.service.ocr.v1.api.model.DocumentRequest;
|
import com.knecon.fforesight.service.ocr.v1.api.model.DocumentRequest;
|
||||||
|
import com.knecon.fforesight.service.ocr.v1.server.configuration.MessagingConfiguration;
|
||||||
|
import com.knecon.fforesight.tenantcommons.TenantContext;
|
||||||
|
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.experimental.FieldDefaults;
|
import lombok.experimental.FieldDefaults;
|
||||||
@ -36,7 +39,7 @@ public class NoStatusUpdateOcrMessageSender implements IOcrMessageSender {
|
|||||||
|
|
||||||
public void sendOcrResponse(String dossierId, String fileId) {
|
public void sendOcrResponse(String dossierId, String fileId) {
|
||||||
|
|
||||||
rabbitTemplate.convertAndSend(MessagingConfiguration.OCR_RESPONSE_QUEUE, new DocumentRequest(dossierId, fileId));
|
rabbitTemplate.convertAndSend(MessagingConfiguration.OCR_RESPONSE_EXCHANGE, TenantContext.getTenantId(), new DocumentRequest(dossierId, fileId));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,6 +19,8 @@ import com.knecon.fforesight.service.ocr.processor.service.IOcrMessageSender;
|
|||||||
import com.knecon.fforesight.service.ocr.processor.service.OCRService;
|
import com.knecon.fforesight.service.ocr.processor.service.OCRService;
|
||||||
import com.knecon.fforesight.service.ocr.processor.service.OsUtils;
|
import com.knecon.fforesight.service.ocr.processor.service.OsUtils;
|
||||||
import com.knecon.fforesight.service.ocr.v1.api.model.DocumentRequest;
|
import com.knecon.fforesight.service.ocr.v1.api.model.DocumentRequest;
|
||||||
|
import com.knecon.fforesight.service.ocr.v1.server.configuration.MessagingConfiguration;
|
||||||
|
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.experimental.FieldDefaults;
|
import lombok.experimental.FieldDefaults;
|
||||||
@ -30,6 +32,8 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
|
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
|
||||||
public class OcrMessageReceiver {
|
public class OcrMessageReceiver {
|
||||||
|
|
||||||
|
public static final String OCR_REQUEST_LISTENER_ID = "ocr-request-listener";
|
||||||
|
|
||||||
FileStorageService fileStorageService;
|
FileStorageService fileStorageService;
|
||||||
ObjectMapper objectMapper;
|
ObjectMapper objectMapper;
|
||||||
OCRService ocrService;
|
OCRService ocrService;
|
||||||
@ -37,7 +41,7 @@ public class OcrMessageReceiver {
|
|||||||
|
|
||||||
|
|
||||||
@RabbitHandler
|
@RabbitHandler
|
||||||
@RabbitListener(queues = MessagingConfiguration.OCR_REQUEST_QUEUE, concurrency = "1")
|
@RabbitListener(id = OCR_REQUEST_LISTENER_ID, concurrency = "1")
|
||||||
public void receiveOcr(Message in) throws IOException {
|
public void receiveOcr(Message in) throws IOException {
|
||||||
|
|
||||||
if (in.getMessageProperties().isRedelivered()) {
|
if (in.getMessageProperties().isRedelivered()) {
|
||||||
|
|||||||
@ -7,8 +7,9 @@ import org.springframework.stereotype.Service;
|
|||||||
import com.knecon.fforesight.service.ocr.processor.service.IOcrMessageSender;
|
import com.knecon.fforesight.service.ocr.processor.service.IOcrMessageSender;
|
||||||
import com.knecon.fforesight.service.ocr.v1.api.model.DocumentRequest;
|
import com.knecon.fforesight.service.ocr.v1.api.model.DocumentRequest;
|
||||||
import com.knecon.fforesight.service.ocr.v1.api.model.OCRStatusUpdateResponse;
|
import com.knecon.fforesight.service.ocr.v1.api.model.OCRStatusUpdateResponse;
|
||||||
|
import com.knecon.fforesight.service.ocr.v1.server.configuration.MessagingConfiguration;
|
||||||
|
import com.knecon.fforesight.tenantcommons.TenantContext;
|
||||||
|
|
||||||
import jakarta.annotation.PostConstruct;
|
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.experimental.FieldDefaults;
|
import lombok.experimental.FieldDefaults;
|
||||||
@ -26,30 +27,33 @@ public class OcrMessageSender implements IOcrMessageSender {
|
|||||||
|
|
||||||
public void sendOcrFinished(String fileId, int totalImages) {
|
public void sendOcrFinished(String fileId, int totalImages) {
|
||||||
|
|
||||||
rabbitTemplate.convertAndSend(MessagingConfiguration.OCR_STATUS_UPDATE_RESPONSE_QUEUE,
|
rabbitTemplate.convertAndSend(MessagingConfiguration.OCR_STATUS_UPDATE_EXCHANGE,
|
||||||
OCRStatusUpdateResponse.builder().fileId(fileId).numberOfPagesToOCR(totalImages).numberOfOCRedPages(totalImages).ocrFinished(true).build());
|
TenantContext.getTenantId(),
|
||||||
|
OCRStatusUpdateResponse.builder().fileId(fileId).numberOfPagesToOCR(totalImages).numberOfOCRedPages(totalImages).ocrFinished(true).build());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void sendOCRStarted(String fileId) {
|
public void sendOCRStarted(String fileId) {
|
||||||
|
|
||||||
rabbitTemplate.convertAndSend(MessagingConfiguration.OCR_STATUS_UPDATE_RESPONSE_QUEUE,
|
rabbitTemplate.convertAndSend(MessagingConfiguration.OCR_STATUS_UPDATE_EXCHANGE,
|
||||||
OCRStatusUpdateResponse.builder().fileId(fileId).ocrStarted(true).build());
|
TenantContext.getTenantId(),
|
||||||
|
OCRStatusUpdateResponse.builder().fileId(fileId).ocrStarted(true).build());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void sendUpdate(String fileId, int finishedImages, int totalImages) {
|
public void sendUpdate(String fileId, int finishedImages, int totalImages) {
|
||||||
|
|
||||||
rabbitTemplate.convertAndSend(MessagingConfiguration.OCR_STATUS_UPDATE_RESPONSE_QUEUE,
|
rabbitTemplate.convertAndSend(MessagingConfiguration.OCR_STATUS_UPDATE_EXCHANGE,
|
||||||
OCRStatusUpdateResponse.builder().fileId(fileId).numberOfPagesToOCR(totalImages).numberOfOCRedPages(finishedImages).build());
|
TenantContext.getTenantId(),
|
||||||
|
OCRStatusUpdateResponse.builder().fileId(fileId).numberOfPagesToOCR(totalImages).numberOfOCRedPages(finishedImages).build());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void sendOcrResponse(String dossierId, String fileId) {
|
public void sendOcrResponse(String dossierId, String fileId) {
|
||||||
|
|
||||||
rabbitTemplate.convertAndSend(MessagingConfiguration.OCR_RESPONSE_QUEUE, new DocumentRequest(dossierId, fileId));
|
rabbitTemplate.convertAndSend(MessagingConfiguration.OCR_RESPONSE_EXCHANGE, TenantContext.getTenantId(), new DocumentRequest(dossierId, fileId));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,69 @@
|
|||||||
|
package com.knecon.fforesight.service.ocr.v1.server.queue;
|
||||||
|
|
||||||
|
import static com.knecon.fforesight.service.ocr.v1.server.configuration.MessagingConfiguration.OCR_DLQ;
|
||||||
|
import static com.knecon.fforesight.service.ocr.v1.server.configuration.MessagingConfiguration.OCR_REQUEST_EXCHANGE;
|
||||||
|
import static com.knecon.fforesight.service.ocr.v1.server.configuration.MessagingConfiguration.OCR_REQUEST_QUEUE_PREFIX;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
|
||||||
|
import org.springframework.amqp.rabbit.annotation.RabbitListener;
|
||||||
|
import org.springframework.boot.context.event.ApplicationReadyEvent;
|
||||||
|
import org.springframework.context.event.EventListener;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import com.knecon.fforesight.tenantcommons.TenantProvider;
|
||||||
|
import com.knecon.fforesight.tenantcommons.model.TenantCreatedEvent;
|
||||||
|
import com.knecon.fforesight.tenantcommons.model.TenantQueueConfiguration;
|
||||||
|
import com.knecon.fforesight.tenantcommons.model.TenantResponse;
|
||||||
|
import com.knecon.fforesight.tenantcommons.queue.RabbitQueueFromExchangeService;
|
||||||
|
import com.knecon.fforesight.tenantcommons.queue.TenantExchangeMessageReceiver;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class TenantExchangeMessageReceiverImpl extends TenantExchangeMessageReceiver {
|
||||||
|
|
||||||
|
public TenantExchangeMessageReceiverImpl(RabbitQueueFromExchangeService rabbitQueueService, TenantProvider tenantProvider) {
|
||||||
|
|
||||||
|
super(rabbitQueueService, tenantProvider);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Set<TenantQueueConfiguration> getTenantQueueConfigs() {
|
||||||
|
|
||||||
|
return Set.of(TenantQueueConfiguration.builder()
|
||||||
|
.listenerId(OcrMessageReceiver.OCR_REQUEST_LISTENER_ID)
|
||||||
|
.exchangeName(OCR_REQUEST_EXCHANGE)
|
||||||
|
.queuePrefix(OCR_REQUEST_QUEUE_PREFIX)
|
||||||
|
.dlqName(OCR_DLQ)
|
||||||
|
.arguments(Map.of("x-max-priority", 2))
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@EventListener(ApplicationReadyEvent.class)
|
||||||
|
public void onApplicationReady() {
|
||||||
|
|
||||||
|
System.out.println("application ready invoked");
|
||||||
|
super.initializeQueues();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@RabbitHandler
|
||||||
|
@RabbitListener(queues = "#{tenantMessagingConfigurationImpl.getTenantCreatedQueueName()}")
|
||||||
|
public void reactToTenantCreation(TenantCreatedEvent tenantCreatedEvent) {
|
||||||
|
|
||||||
|
super.reactToTenantCreation(tenantCreatedEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@RabbitHandler
|
||||||
|
@RabbitListener(queues = "#{tenantMessagingConfigurationImpl.getTenantDeletedQueueName()}")
|
||||||
|
public void reactToTenantDeletion(TenantResponse tenantResponse) {
|
||||||
|
|
||||||
|
super.reactToTenantDeletion(tenantResponse);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -21,4 +21,6 @@ management:
|
|||||||
probability: ${TRACING_PROBABILITY:1.0}
|
probability: ${TRACING_PROBABILITY:1.0}
|
||||||
otlp:
|
otlp:
|
||||||
tracing:
|
tracing:
|
||||||
endpoint: ${OTLP_ENDPOINT:http://otel-collector-opentelemetry-collector.otel-collector:4318/v1/traces}
|
endpoint: ${OTLP_ENDPOINT:http://otel-collector-opentelemetry-collector.otel-collector:4318/v1/traces}
|
||||||
|
|
||||||
|
POD_NAME: ocr-service
|
||||||
Loading…
x
Reference in New Issue
Block a user