As you may expect, the MANUAL ackMode delegates all the responsibility of performing the ACK on the Message to the application logic.
With this configuration, every Message received by either the listener or consume operations will have an ackId available in the MuleMessage attributes which identifies this Message uniquely for a given channel.
The ackId that identifies the Message will then be passed on to the amqp:ack operation:
<flow name="consumerWithManualAck">
<amqp:consume config-ref="config" queueName="${queueName}" ackMode="MANUAL" />
<!--Do message processing-->
<logger message="#[payload]">
<amqp:ack ackId="#[attributes.ackId]" />
</flow>