У меня есть метод, который потребляет сообщения и проверяет некоторые внутренние условия. Если проверка не удалась, я хочу отклонить сообщение и поместить его обратно в очередь, чтобы оно поступило к потребителю позже.
Я не нашел никакого специального API в Reactive Messaging for MicroProfile или SmallRye Reactive Messaging для отправки отрицательного подтверждения и повторного запроса сообщения. Все, что я могу сделать, это использовать Acknowledgment.Strategy.MANUAL
, а не звонить message.ack()
. Таким образом, сообщение остается в очереди, но не ставится в очередь - потребительский метод больше не получает это сообщение. Мой код:
@Incoming("my-queue")
@Acknowledgment(Acknowledgment.Strategy.MANUAL)
public CompletionStage<Void> getMessage(Message<String> message) {
if (!someCondition()) {
// validation fails. reject and requeue the message
return CompletableFuture.completedFuture(null);
} else {
process(message.getPayload());
return message.ack();
}
}
Как правильно оформить сообщение?