Обычно, если сообщение не было успешно подтверждено, после ackTimeout сообщение будет снова доставлено от брокера к потребителю.Так что здесь, в большинстве случаев, нет необходимости повторять попытку.
может быть, некоторой обработки, подобной этой, достаточно:
consumer.acknowledgeAsync(msgId)
.thenAccept(consumer -> successHandlerMethod())
.exceptionally(exception -> failHandlerMethod());