blob: 433363263402975c6bd7ce5b7edc0c596f9fd7b1 [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.util.Map;
import java.util.Set;
import org.apache.activemq.Service;
import org.apache.activemq.broker.ConnectionContext;
import org.apache.activemq.broker.ConsumerBrokerExchange;
import org.apache.activemq.broker.ProducerBrokerExchange;
import org.apache.activemq.command.ActiveMQDestination;
import org.apache.activemq.command.ConsumerControl;
import org.apache.activemq.command.ConsumerInfo;
import org.apache.activemq.command.Message;
import org.apache.activemq.command.MessageAck;
import org.apache.activemq.command.MessageDispatchNotification;
import org.apache.activemq.command.MessagePull;
import org.apache.activemq.command.ProducerInfo;
import org.apache.activemq.command.RemoveSubscriptionInfo;
import org.apache.activemq.command.Response;
/**
* A Region is used to implement the different QOS options available to
* a broker. A Broker is composed of multiple message processing Regions that
* provide different QOS options.
*
*
*/
public interface Region extends Service {
/**
* Used to create a destination. Usually, this method is invoked as a side-effect of sending
* a message to a destination that does not exist yet.
*
* @param context
* @param destination the destination to create.
* @param createIfTemporary
* @return TODO
* @throws Exception TODO
*/
Destination addDestination(ConnectionContext context, ActiveMQDestination destination, boolean createIfTemporary) throws Exception;
/**
* Used to destroy a destination.
* This should try to quiesce use of the destination up to the timeout allotted time before removing the destination.
* This will remove all persistent messages associated with the destination.
*
* @param context the environment the operation is being executed under.
* @param destination what is being removed from the broker.
* @param timeout the max amount of time to wait for the destination to quiesce
* @throws Exception TODO
*/
void removeDestination(ConnectionContext context, ActiveMQDestination destination, long timeout) throws Exception;
/**
* Returns a copy of the current destinations available in the region
*
* @return a copy of the regions currently active at the time of the call with the key the destination and the value the Destination.
*/
Map<ActiveMQDestination, Destination> getDestinationMap();
/**
* Adds a consumer.
* @param context the environment the operation is being executed under.
* @return TODO
* @throws Exception TODO
*/
Subscription addConsumer(ConnectionContext context, ConsumerInfo info) throws Exception;
/**
* Removes a consumer.
* @param context the environment the operation is being executed under.
* @throws Exception TODO
*/
void removeConsumer(ConnectionContext context, ConsumerInfo info) throws Exception;
/**
* Adds a Producer.
* @param context the environment the operation is being executed under.
* @throws Exception TODO
*/
void addProducer(ConnectionContext context, ProducerInfo info) throws Exception;
/**
* Removes a Producer.
* @param context the environment the operation is being executed under.
* @throws Exception TODO
*/
void removeProducer(ConnectionContext context, ProducerInfo info) throws Exception;
/**
* Deletes a durable subscription.
* @param context the environment the operation is being executed under.
* @param info TODO
* @throws Exception TODO
*/
void removeSubscription(ConnectionContext context, RemoveSubscriptionInfo info) throws Exception;
/**
* Send a message to the broker to using the specified destination. The destination specified
* in the message does not need to match the destination the message is sent to. This is
* handy in case the message is being sent to a dead letter destination.
* @param producerExchange the environment the operation is being executed under.
* @param message
* @throws Exception TODO
*/
void send(ProducerBrokerExchange producerExchange, Message message) throws Exception;
/**
* Used to acknowledge the receipt of a message by a client.
* @param consumerExchange the environment the operation is being executed under.
* @throws Exception TODO
*/
void acknowledge(ConsumerBrokerExchange consumerExchange, MessageAck ack) throws Exception;
/**
* Allows a consumer to pull a message from a queue
*/
Response messagePull(ConnectionContext context, MessagePull pull) throws Exception;
/**
* Process a notification of a dispatch - used by a Slave Broker
* @param messageDispatchNotification
* @throws Exception TODO
*/
void processDispatchNotification(MessageDispatchNotification messageDispatchNotification) throws Exception;
void gc();
/**
* Provide an exact or wildcard lookup of destinations in the region
*
* @return a set of matching destination objects.
*/
Set <Destination>getDestinations(ActiveMQDestination destination);
void processConsumerControl(ConsumerBrokerExchange consumerExchange, ConsumerControl control);
}