How to send NACK(Negative Acknowledgement) using java API

You only need to recover the single consumer that had the problem. If you recover() on the session it will recover() all consumers which is not necessary if you have multiple consumer instances.

JMSRedelivered is set in the redelivered messages. You can also retrieve JMSXDeliveryCount which will be ‘1’ on the first delivery and greater than 1 on all redelivered messages.