Class FederationQueuePolicyManager
- java.lang.Object
-
- org.apache.activemq.artemis.protocol.amqp.federation.internal.FederationQueuePolicyManager
-
- All Implemented Interfaces:
ActiveMQServerBasePlugin,ActiveMQServerConsumerPlugin
- Direct Known Subclasses:
AMQPFederationQueuePolicyManager
public abstract class FederationQueuePolicyManager extends Object implements ActiveMQServerConsumerPlugin
Manager for a federation which has queue federation configuration which requires monitoring broker queues for demand and creating a consumer for on the remote side to federate messages back to this peer.
-
-
Field Summary
Fields Modifier and Type Field Description protected FederationInternalfederationprotected Predicate<org.apache.activemq.artemis.core.server.ServerConsumer>federationConsumerMatcherprotected FederationReceiveFromQueuePolicypolicyprotected Map<FederationConsumerInfo,FederationConsumerEntry>remoteConsumersprotected org.apache.activemq.artemis.core.server.ActiveMQServerserver
-
Constructor Summary
Constructors Constructor Description FederationQueuePolicyManager(FederationInternal federation, FederationReceiveFromQueuePolicy queuePolicy)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description voidafterCreateConsumer(org.apache.activemq.artemis.core.server.ServerConsumer consumer)voidbeforeCloseConsumer(org.apache.activemq.artemis.core.server.ServerConsumer consumer, boolean failed)protected voidcheckQueueForMatch(org.apache.activemq.artemis.core.server.Queue queue)protected FederationConsumerEntrycreateConsumerEntry(FederationConsumerInternal consumer)Creates aFederationConsumerEntryinstance that will be used to store aFederationConsumeralong with other state data needed to manage a federation consumer instance.protected FederationConsumerInfocreateConsumerInfo(org.apache.activemq.artemis.core.server.ServerConsumer consumer)Create a newFederationConsumerInfobased on the givenServerConsumerand the configuredFederationReceiveFromQueuePolicy.protected abstract FederationConsumerInternalcreateFederationConsumer(FederationConsumerInfo consumerInfo)Create a newFederationConsumerInternalinstance using the consumer information given.protected Predicate<org.apache.activemq.artemis.core.server.ServerConsumer>createFederationConsumerMatcher(org.apache.activemq.artemis.core.server.ActiveMQServer server, FederationReceiveFromQueuePolicy policy)Creates aPredicatethat should return true if the given consumer is a federation created consumer which should not be further federated.protected abstract booleanisPluginBlockingFederationConsumerCreate(org.apache.activemq.artemis.core.server.Queue queue)Query all registered plugins for this federation instance to determine if any wish to prevent a federation consumer from being created for the given Queue.protected voidreactIfConsumerMatchesPolicy(org.apache.activemq.artemis.core.server.ServerConsumer consumer)protected voidscanAllQueueBindings()protected abstract voidsignalAfterCloseFederationConsumer(FederationConsumer consumer)Signal any registered plugins for this federation instance that a remote Queue consumer has now been closed.protected abstract voidsignalAfterCreateFederationConsumer(FederationConsumer consumer)Signal any registered plugins for this federation instance that a remote Queue consumer has been created.protected abstract voidsignalBeforeCloseFederationConsumer(FederationConsumer consumer)Signal any registered plugins for this federation instance that a remote Queue consumer is about to be closed.protected abstract voidsignalBeforeCreateFederationConsumer(FederationConsumerInfo info)Signal any registered plugins for this federation instance that a remote Queue consumer is being created.voidstart()Start the queue policy manager which will initiate a scan of all broker queue bindings and create and matching remote receivers.voidstop()Stops the queue policy manager which will close any open remote receivers that are active for local queue demand.protected booleantestIfQueueMatchesPolicy(String address, String queueName)Performs the test against the configured queue policy to check if the target queue and its associated address is a match or not.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.activemq.artemis.core.server.plugin.ActiveMQServerBasePlugin
init, registered, setInit, unregistered
-
Methods inherited from interface org.apache.activemq.artemis.core.server.plugin.ActiveMQServerConsumerPlugin
afterCloseConsumer, beforeCreateConsumer, beforeCreateConsumer
-
-
-
-
Field Detail
-
server
protected final org.apache.activemq.artemis.core.server.ActiveMQServer server
-
federationConsumerMatcher
protected final Predicate<org.apache.activemq.artemis.core.server.ServerConsumer> federationConsumerMatcher
-
policy
protected final FederationReceiveFromQueuePolicy policy
-
remoteConsumers
protected final Map<FederationConsumerInfo,FederationConsumerEntry> remoteConsumers
-
federation
protected final FederationInternal federation
-
-
Constructor Detail
-
FederationQueuePolicyManager
public FederationQueuePolicyManager(FederationInternal federation, FederationReceiveFromQueuePolicy queuePolicy) throws ActiveMQException
- Throws:
ActiveMQException
-
-
Method Detail
-
start
public void start()
Start the queue policy manager which will initiate a scan of all broker queue bindings and create and matching remote receivers. Start on a policy manager should only be called after its parentFederationis started and the federation connection has been established.
-
stop
public void stop()
Stops the queue policy manager which will close any open remote receivers that are active for local queue demand. Stop should generally be called whenever the parentFederationloses its connection to the remote.
-
afterCreateConsumer
public void afterCreateConsumer(org.apache.activemq.artemis.core.server.ServerConsumer consumer)
- Specified by:
afterCreateConsumerin interfaceActiveMQServerConsumerPlugin
-
beforeCloseConsumer
public void beforeCloseConsumer(org.apache.activemq.artemis.core.server.ServerConsumer consumer, boolean failed)- Specified by:
beforeCloseConsumerin interfaceActiveMQServerConsumerPlugin
-
scanAllQueueBindings
protected final void scanAllQueueBindings()
-
checkQueueForMatch
protected final void checkQueueForMatch(org.apache.activemq.artemis.core.server.Queue queue)
-
reactIfConsumerMatchesPolicy
protected final void reactIfConsumerMatchesPolicy(org.apache.activemq.artemis.core.server.ServerConsumer consumer)
-
testIfQueueMatchesPolicy
protected boolean testIfQueueMatchesPolicy(String address, String queueName)
Performs the test against the configured queue policy to check if the target queue and its associated address is a match or not. A subclass can override this method and provide its own match tests in combination with the configured matching policy.- Parameters:
address- The address that is being tested for a policy match.queueName- The name of the queue that is being tested for a policy match.- Returns:
trueif the address given is a match against the policy.
-
createConsumerInfo
protected FederationConsumerInfo createConsumerInfo(org.apache.activemq.artemis.core.server.ServerConsumer consumer)
Create a newFederationConsumerInfobased on the givenServerConsumerand the configuredFederationReceiveFromQueuePolicy. A subclass can override this method to return a consumer information object with additional data used be that implementation.- Parameters:
consumer- TheServerConsumerto use as a basis for the consumer information object.- Returns:
- a new
FederationConsumerInfoinstance based on the server consumer
-
createConsumerEntry
protected FederationConsumerEntry createConsumerEntry(FederationConsumerInternal consumer)
Creates aFederationConsumerEntryinstance that will be used to store aFederationConsumeralong with other state data needed to manage a federation consumer instance. A subclass can override this method to return a more customized entry type with additional state data.- Parameters:
consumer- TheFederationConsumerInternalinstance that will be housed in this entry.- Returns:
- a new
FederationConsumerEntrythat holds the given federation consumer.
-
createFederationConsumer
protected abstract FederationConsumerInternal createFederationConsumer(FederationConsumerInfo consumerInfo)
Create a newFederationConsumerInternalinstance using the consumer information given. This is called when local demand for a matched queue requires a new consumer to be created. A subclass must override this to perform the creation of the remote consumer.- Parameters:
consumerInfo- TheFederationConsumerInfothat defines the consumer to be created.- Returns:
- a new
FederationConsumerInternalinstance that will reside in this manager.
-
createFederationConsumerMatcher
protected Predicate<org.apache.activemq.artemis.core.server.ServerConsumer> createFederationConsumerMatcher(org.apache.activemq.artemis.core.server.ActiveMQServer server, FederationReceiveFromQueuePolicy policy) throws ActiveMQException
Creates aPredicatethat should return true if the given consumer is a federation created consumer which should not be further federated.- Parameters:
server- The server instance for use in creating the filteringPredicate.policy- The configured Queue matching policy that can provide additional match criteria.- Returns:
- a
Predicatethat will return true if the consumer should be filtered. - Throws:
ActiveMQException- if an error occurs while creating the new consumer filter.
-
signalBeforeCreateFederationConsumer
protected abstract void signalBeforeCreateFederationConsumer(FederationConsumerInfo info)
Signal any registered plugins for this federation instance that a remote Queue consumer is being created.- Parameters:
info- TheFederationConsumerInfothat describes the remote Queue consumer
-
signalAfterCreateFederationConsumer
protected abstract void signalAfterCreateFederationConsumer(FederationConsumer consumer)
Signal any registered plugins for this federation instance that a remote Queue consumer has been created.- Parameters:
consumer- TheFederationConsumerInfothat describes the remote Queue consumer
-
signalBeforeCloseFederationConsumer
protected abstract void signalBeforeCloseFederationConsumer(FederationConsumer consumer)
Signal any registered plugins for this federation instance that a remote Queue consumer is about to be closed.- Parameters:
consumer- TheFederationConsumerthat that is about to be closed.
-
signalAfterCloseFederationConsumer
protected abstract void signalAfterCloseFederationConsumer(FederationConsumer consumer)
Signal any registered plugins for this federation instance that a remote Queue consumer has now been closed.- Parameters:
consumer- TheFederationConsumerthat that has been closed.
-
isPluginBlockingFederationConsumerCreate
protected abstract boolean isPluginBlockingFederationConsumerCreate(org.apache.activemq.artemis.core.server.Queue queue)
Query all registered plugins for this federation instance to determine if any wish to prevent a federation consumer from being created for the given Queue.- Parameters:
queue- TheQueuethat the federation queue manager is attempting to create a remote consumer for.- Returns:
- true if any registered plugin signaled that creation should be suppressed.
-
-