public List<Message> consumeMulti(final int number, Boolean shouldBeRequeued) throws Exception {
				
		if (shouldBeRequeued) {
			return this.rabbitTemplate.execute(new ChannelCallback<List<Message>>() {
				public List<Message> doInRabbit(Channel channel) throws IOException {
					List<Message> resultList = new ArrayList<Message>(number);
					GetResponse lastNonNullResponse = null;
					GetResponse response = null;
					for(int i=0; i<number; i++) {
						Message newMessage = null;
						
						response = channel.basicGet(queueName, false);
						// Response can be null is the case that there is no message on the queue.
						if (response != null) {
							newMessage =  DefaultRabbitMQueueConsumer.this.buildMessageFromResponse(response);
							lastNonNullResponse = response;
						}
						
						if (newMessage != null) {
							resultList.add(newMessage);
						} else {
							break;
						}
					}
					
					//Nack only the last message tag in MULTI mode
					if (lastNonNullResponse != null) {
						long deliveryTag = lastNonNullResponse.getEnvelope().getDeliveryTag();
						channel.basicNack(deliveryTag, true, true);
					}
					
					return resultList;
				}
			});
		} else {
			List<Message> resultList = new ArrayList<Message>(number);
			for(int i=0; i<number; i++) {
				Message newMessage = consume();
				if (newMessage != null) {
					resultList.add(newMessage);
				} else {
					break;
				}
			}
			return resultList;
		}
	}