Precisa de atenção aqui, se por algum motivo duas instancias pegar a mesma mensagem e tentar salvar 1 com a versão e o payload identifier igual, teremos uma constraint violation exception, se recebermos essa exception, podemos só ignorar a mensagem ou então tentar re-processar que talvez não seria nada correto. Talvez o melhor seja só redirecionar ela pra DLT com o erro de constraint violation exception
this.productGateway.findById(aId)
.ifPresentOrElse(aProduct -> {
this.saveProductUseCase.execute(aProduct);
// TODO: Need attention here, save event possible to throws unique constraint violation
// because the payload identifier and versions is the same
saveEventMetadata(aDomainEvent, aId);
ack.acknowledge();
LOG.info(EVENT_RECEIVED_MESSAGE, type, aId);
}, () -> {
LOG.debug(NOT_FOUND_MESSAGE, aId);
this.eventMetadataGateway.deleteByEventId(getEventIdHeaderValue(message));
ack.nack(Duration.ofSeconds(5));
});
Precisa de atenção aqui, se por algum motivo duas instancias pegar a mesma mensagem e tentar salvar 1 com a versão e o payload identifier igual, teremos uma constraint violation exception, se recebermos essa exception, podemos só ignorar a mensagem ou então tentar re-processar que talvez não seria nada correto. Talvez o melhor seja só redirecionar ela pra DLT com o erro de constraint violation exception