blob: 7db682d63e7c7ff99c1caf501cedfeda17577ace [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.activemq.broker.region;
import java.io.IOException;
import java.util.List;
import javax.jms.InvalidSelectorException;
import javax.management.ObjectName;
import org.apache.activemq.broker.ConnectionContext;
import org.apache.activemq.command.ActiveMQDestination;
import org.apache.activemq.command.ConsumerInfo;
import org.apache.activemq.command.MessageAck;
import org.apache.activemq.command.MessageDispatchNotification;
import org.apache.activemq.command.MessagePull;
import org.apache.activemq.command.Response;
import org.apache.activemq.filter.MessageEvaluationContext;
/**
*
*/
public interface Subscription extends SubscriptionRecovery {
/**
* Used to add messages that match the subscription.
* @param node
* @throws Exception
* @throws InterruptedException
* @throws IOException
*/
void add(MessageReference node) throws Exception;
/**
* Used when client acknowledge receipt of dispatched message.
* @param node
* @throws IOException
* @throws Exception
*/
void acknowledge(ConnectionContext context, final MessageAck ack) throws Exception;
/**
* Allows a consumer to pull a message on demand
*/
Response pullMessage(ConnectionContext context, MessagePull pull) throws Exception;
/**
* Is the subscription interested in the message?
* @param node
* @param context
* @return
* @throws IOException
*/
boolean matches(MessageReference node, MessageEvaluationContext context) throws IOException;
/**
* Is the subscription interested in messages in the destination?
* @param context
* @return
*/
boolean matches(ActiveMQDestination destination);
/**
* The subscription will be receiving messages from the destination.
* @param context
* @param destination
* @throws Exception
*/
void add(ConnectionContext context, Destination destination) throws Exception;
/**
* The subscription will be no longer be receiving messages from the destination.
* @param context
* @param destination
* @return a list of un-acked messages that were added to the subscription.
*/
List<MessageReference> remove(ConnectionContext context, Destination destination) throws Exception;
/**
* The ConsumerInfo object that created the subscription.
* @param destination
*/
ConsumerInfo getConsumerInfo();
/**
* The subscription should release as may references as it can to help the garbage collector
* reclaim memory.
*/
void gc();
/**
* Used by a Slave Broker to update dispatch infomation
* @param mdn
* @throws Exception
*/
void processMessageDispatchNotification(MessageDispatchNotification mdn) throws Exception;
/**
* @return true if the broker is currently in slave mode
*/
boolean isSlave();
/**
* @return number of messages pending delivery
*/
int getPendingQueueSize();
/**
* @return number of messages dispatched to the client
*/
int getDispatchedQueueSize();
/**
* @return number of messages dispatched to the client
*/
long getDispatchedCounter();
/**
* @return number of messages that matched the subscription
*/
long getEnqueueCounter();
/**
* @return number of messages queued by the client
*/
long getDequeueCounter();
/**
* @return the JMS selector on the current subscription
*/
String getSelector();
/**
* Attempts to change the current active selector on the subscription.
* This operation is not supported for persistent topics.
*/
void setSelector(String selector) throws InvalidSelectorException, UnsupportedOperationException;
/**
* @return the JMX object name that this subscription was registered as if applicable
*/
ObjectName getObjectName();
/**
* Set when the subscription is registered in JMX
*/
void setObjectName(ObjectName objectName);
/**
* @return true when 60% or more room is left for dispatching messages
*/
boolean isLowWaterMark();
/**
* @return true when 10% or less room is left for dispatching messages
*/
boolean isHighWaterMark();
/**
* @return true if there is no space to dispatch messages
*/
boolean isFull();
/**
* inform the MessageConsumer on the client to change it's prefetch
* @param newPrefetch
*/
void updateConsumerPrefetch(int newPrefetch);
/**
* Called when the subscription is destroyed.
*/
void destroy();
/**
* @return the prefetch size that is configured for the subscription
*/
int getPrefetchSize();
/**
* @return the number of messages awaiting acknowledgement
*/
int getInFlightSize();
/**
* @return the in flight messages as a percentage of the prefetch size
*/
int getInFlightUsage();
/**
* Informs the Broker if the subscription needs to intervention to recover it's state
* e.g. DurableTopicSubscriber may do
* @see org.apache.activemq.region.cursors.PendingMessageCursor
* @return true if recovery required
*/
boolean isRecoveryRequired();
/**
* @return true if a browser
*/
boolean isBrowser();
/**
* @return the number of messages this subscription can accept before its full
*/
int countBeforeFull();
ConnectionContext getContext();
public int getCursorMemoryHighWaterMark();
public void setCursorMemoryHighWaterMark(int cursorMemoryHighWaterMark);
boolean isSlowConsumer();
void unmatched(MessageReference node) throws IOException;
}