in technology/java-activemq-quarkus/solver/src/main/java/org/acme/schooltimetabling/messaging/TimeTableMessagingHandler.java [47:70]
public CompletionStage<Void> solve(Message<String> solverRequestMessage) {
return CompletableFuture.runAsync(() -> {
SolverRequest solverRequest;
try {
solverRequest = objectMapper.readValue(solverRequestMessage.getPayload(), SolverRequest.class);
} catch (Throwable throwable) {
LOGGER.warn("Unable to deserialize solver request from JSON.", throwable);
/* Usually a bad request, which should be immediately rejected. No error response can be sent back
as the problemId is unknown. Such a NACKed message is redirected to the DLQ (Dead letter queue).
Catching the Throwable to make sure no unchecked exceptions are missed. */
solverRequestMessage.nack(throwable);
return;
}
TimeTable solution;
try {
solution = solver.solve(solverRequest.getTimeTable());
replySuccess(solverRequestMessage, solverRequest.getProblemId(), solution);
} catch (Throwable throwable) {
LOGGER.warn("Error during processing a solver request ({}).", solverRequest.getProblemId(), throwable);
replyFailure(solverRequestMessage, solverRequest.getProblemId(), throwable);
}
});
}