" on channel:" + channel.debugIdentity());
}
long deliveryTag = body.getDeliveryTag();
QueueEntry message = channel.getUnacknowledgedMessageMap().get(deliveryTag);
if (message == null)
{
_logger.warn("Dropping reject request as message is null for tag:" + deliveryTag);
}
else
{
if (message.isQueueDeleted())
{
_logger.warn("Message's Queue has already been purged, dropping message");
message = channel.getUnacknowledgedMessageMap().remove(deliveryTag);
if(message != null)
{
message.discard();
}
return;
}
if (message.getMessage() == null)
{
_logger.warn("Message has already been purged, unable to Reject.");
return;
}
if (_logger.isDebugEnabled())
{
_logger.debug("Rejecting: DT:" + deliveryTag + "-" + message.getMessage() +
": Requeue:" + body.getRequeue() +
" on channel:" + channel.debugIdentity());
}
message.reject();
if (body.getRequeue())
{
channel.requeue(deliveryTag);
//this requeue represents a message rejected from the pre-dispatch queue
//therefore we need to amend the delivery counter.
message.decrementDeliveryCount();
}
else
{
final boolean maxDeliveryCountEnabled = channel.isMaxDeliveryCountEnabled(deliveryTag);
_logger.debug("maxDeliveryCountEnabled: " + maxDeliveryCountEnabled + " deliveryTag " + deliveryTag);
if (maxDeliveryCountEnabled)
{
final boolean deliveredTooManyTimes = channel.isDeliveredTooManyTimes(deliveryTag);
_logger.debug("deliveredTooManyTimes: " + deliveredTooManyTimes + " deliveryTag " + deliveryTag);
if (deliveredTooManyTimes)
{
channel.deadLetter(body.getDeliveryTag());
}
else
{
//this requeue represents a message rejected because of a recover/rollback that we
//are not ready to DLQ. We rely on the reject command to resend from the unacked map
//and therefore need to increment the delivery counter so we cancel out the effect
//of the AMQChannel#resend() decrement.
message.incrementDeliveryCount();
}
}
else
{
channel.deadLetter(body.getDeliveryTag());