blob: aceebc722b64f3253e96967a86abdf9f3bdf89db [file] [log] [blame]
/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.apache.qpid.server.queue;
import org.apache.qpid.server.binding.Binding;
import org.apache.qpid.server.configuration.QueueConfiguration;
import org.apache.qpid.server.exchange.Exchange;
import org.apache.qpid.server.exchange.ExchangeReferrer;
import org.apache.qpid.server.logging.LogSubject;
import org.apache.qpid.server.message.MessageDestination;
import org.apache.qpid.server.message.MessageSource;
import org.apache.qpid.server.model.ExclusivityPolicy;
import org.apache.qpid.server.model.LifetimePolicy;
import org.apache.qpid.server.protocol.CapacityChecker;
import org.apache.qpid.server.consumer.Consumer;
import org.apache.qpid.server.security.QpidSecurityException;
import org.apache.qpid.server.util.Action;
import org.apache.qpid.server.util.Deletable;
import org.apache.qpid.server.virtualhost.VirtualHost;
import java.util.Collection;
import java.util.List;
import java.util.Set;
public interface AMQQueue<E extends QueueEntry<E,Q,C>, Q extends AMQQueue<E,Q,C>, C extends Consumer>
extends Comparable<Q>, ExchangeReferrer, BaseQueue<C>, MessageSource<C,Q>, CapacityChecker, MessageDestination,
Deletable<Q>
{
void setExclusivityPolicy(ExclusivityPolicy desiredPolicy) throws ExistingConsumerPreventsExclusive;
public interface NotificationListener
{
void notifyClients(NotificationCheck notification, AMQQueue queue, String notificationMsg);
}
boolean getDeleteOnNoConsumers();
void setDeleteOnNoConsumers(boolean b);
void addBinding(Binding binding);
void removeBinding(Binding binding);
List<Binding> getBindings();
int getBindingCount();
LogSubject getLogSubject();
long getUnackedMessageBytes();
long getTotalDequeueCount();
long getTotalEnqueueCount();
LifetimePolicy getLifetimePolicy();
String getOwner();
VirtualHost getVirtualHost();
int getConsumerCount();
int getActiveConsumerCount();
boolean hasExclusiveConsumer();
boolean isUnused();
boolean isEmpty();
int getMessageCount();
long getQueueDepth();
long getOldestMessageArrivalTime();
boolean isDeleted();
int delete() throws QpidSecurityException;
void requeue(E entry);
void dequeue(E entry);
void decrementUnackedMsgCount(E queueEntry);
boolean resend(final E entry, final C consumer);
List<E> getMessagesOnTheQueue();
List<Long> getMessagesOnTheQueue(int num);
List<Long> getMessagesOnTheQueue(int num, int offset);
E getMessageOnTheQueue(long messageId);
/**
* Returns a list of QueEntries from a given range of queue positions, eg messages 5 to 10 on the queue.
*
* The 'queue position' index starts from 1. Using 0 in 'from' will be ignored and continue from 1.
* Using 0 in the 'to' field will return an empty list regardless of the 'from' value.
* @param fromPosition
* @param toPosition
* @return
*/
public List<E> getMessagesRangeOnTheQueue(final long fromPosition, final long toPosition);
void visit(QueueEntryVisitor<E> visitor);
long getMaximumMessageSize();
void setMaximumMessageSize(long value);
long getMaximumMessageCount();
void setMaximumMessageCount(long value);
long getMaximumQueueDepth();
void setMaximumQueueDepth(long value);
long getMaximumMessageAge();
void setMaximumMessageAge(final long maximumMessageAge);
long getMinimumAlertRepeatGap();
void setMinimumAlertRepeatGap(long value);
long getCapacity();
void setCapacity(long capacity);
long getFlowResumeCapacity();
void setFlowResumeCapacity(long flowResumeCapacity);
boolean isOverfull();
void deleteMessageFromTop();
long clearQueue() throws QpidSecurityException;
/**
* Checks the status of messages on the queue, purging expired ones, firing age related alerts etc.
*/
void checkMessageStatus();
Set<NotificationCheck> getNotificationChecks();
void deliverAsync();
void stop();
Exchange getAlternateExchange();
void setAlternateExchange(Exchange exchange);
Collection<String> getAvailableAttributes();
Object getAttribute(String attrName);
/**
* Gets the maximum delivery count. If a message on this queue
* is delivered more than maximumDeliveryCount, the message will be
* routed to the {@link #getAlternateExchange()} (if set), or otherwise
* discarded. 0 indicates that maximum deliver count should not be enforced.
*
* @return maximum delivery count
*/
int getMaximumDeliveryCount();
/**
* Sets the maximum delivery count.
*
* @param maximumDeliveryCount maximum delivery count
*/
public void setMaximumDeliveryCount(final int maximumDeliveryCount);
void setNotificationListener(NotificationListener listener);
/**
* Sets the free text description of this queue.
*
* @param description
*
*/
void setDescription(String description);
/**
* Gets the free text description of this queue.
*/
String getDescription();
long getPersistentByteDequeues();
long getPersistentMsgDequeues();
long getPersistentByteEnqueues();
long getPersistentMsgEnqueues();
long getTotalDequeueSize();
long getTotalEnqueueSize();
long getUnackedMessageCount();
}