Package org.apache.activemq.network
Class DemandForwardingBridgeSupport
- java.lang.Object
-
- org.apache.activemq.network.DemandForwardingBridgeSupport
-
- All Implemented Interfaces:
BrokerServiceAware,NetworkBridge,org.apache.activemq.Service
- Direct Known Subclasses:
CompositeDemandForwardingBridge,DemandForwardingBridge
public abstract class DemandForwardingBridgeSupport extends Object implements NetworkBridge, BrokerServiceAware
A useful base class for implementing demand forwarding bridges.
-
-
Field Summary
Fields Modifier and Type Field Description protected AtomicBooleanbridgeFailedprotected BrokerServicebrokerServiceprotected NetworkBridgeConfigurationconfigurationprotected org.apache.activemq.util.LongSequenceGeneratorconsumerIdGeneratorprotected NetworkBridgeFilterFactorydefaultFilterFactoryprotected intdemandConsumerDispatchedprotected org.apache.activemq.command.ConsumerInfodemandConsumerInfoprotected AtomicBooleandisposedprotected static StringDURABLE_SUB_PREFIXprotected org.apache.activemq.command.ActiveMQDestination[]durableDestinationsprotected org.apache.activemq.command.ActiveMQDestination[]dynamicallyIncludedDestinationsprotected org.apache.activemq.command.ActiveMQDestination[]excludedDestinationsprotected Set<org.apache.activemq.command.ConsumerId>forcedDurableRemoteIdprotected org.apache.activemq.util.IdGeneratoridGeneratorprotected AtomicBooleanlastConnectSucceededprotected AtomicBooleanlocalBridgeStartedprotected org.apache.activemq.transport.TransportlocalBrokerprotected org.apache.activemq.command.BrokerIdlocalBrokerIdprotected org.apache.activemq.command.BrokerId[]localBrokerPathprotected StringlocalClientIdprotected org.apache.activemq.command.ConnectionInfolocalConnectionInfoprotected org.apache.activemq.command.SessionInfolocalSessionInfoprotected CountDownLatchlocalStartedLatchprotected NetworkBridgeStatisticsnetworkBridgeStatisticsprotected org.apache.activemq.command.ProducerInfoproducerInfoprotected AtomicBooleanremoteBridgeStartedprotected org.apache.activemq.transport.TransportremoteBrokerprotected org.apache.activemq.command.BrokerIdremoteBrokerIdprotected StringremoteBrokerNameprotected org.apache.activemq.command.BrokerId[]remoteBrokerPathprotected org.apache.activemq.command.ConnectionInforemoteConnectionInfoprotected CountDownLatchstartedLatchprotected org.apache.activemq.command.ActiveMQDestination[]staticallyIncludedDestinationsprotected CountDownLatchstaticDestinationsLatchprotected ConcurrentMap<org.apache.activemq.command.ConsumerId,DemandSubscription>subscriptionMapByLocalIdprotected ConcurrentMap<org.apache.activemq.command.ConsumerId,DemandSubscription>subscriptionMapByRemoteId
-
Constructor Summary
Constructors Constructor Description DemandForwardingBridgeSupport(NetworkBridgeConfiguration configuration, org.apache.activemq.transport.Transport localBroker, org.apache.activemq.transport.Transport remoteBroker)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidaddConsumerInfo(org.apache.activemq.command.ConsumerInfo consumerInfo)protected voidaddProxyNetworkSubscriptionBrokerPath(DemandSubscription sub, org.apache.activemq.command.BrokerId[] path, String subName)Add a durable remote proxy subscription when we can generate via the BrokerId path This is the most common scenarioprotected voidaddProxyNetworkSubscriptionClientId(DemandSubscription sub, String clientId, String subName)This scenaior is primarily used for durable sync on broker restartsprotected voidaddRemoteBrokerToBrokerPath(org.apache.activemq.command.ConsumerInfo info)protected voidaddSubscription(DemandSubscription sub)protected org.apache.activemq.command.BrokerId[]appendToBrokerPath(org.apache.activemq.command.BrokerId[] brokerPath, org.apache.activemq.command.BrokerId idToAppend)protected org.apache.activemq.command.BrokerId[]appendToBrokerPath(org.apache.activemq.command.BrokerId[] brokerPath, org.apache.activemq.command.BrokerId[] pathsToAppend)protected booleancanDuplexDispatch(org.apache.activemq.command.Message message)protected voidconfigureConsumerPrefetch(org.apache.activemq.command.ConsumerInfo consumerInfo)protected voidconfigureDemandSubscription(org.apache.activemq.command.ConsumerInfo info, DemandSubscription sub)protected org.apache.activemq.command.MessageconfigureMessage(org.apache.activemq.command.MessageDispatch md)static booleancontains(org.apache.activemq.command.BrokerId[] brokerPath, org.apache.activemq.command.BrokerId brokerId)protected DemandSubscriptioncreateDemandSubscription(org.apache.activemq.command.ActiveMQDestination destination, String subscriptionName)protected DemandSubscriptioncreateDemandSubscription(org.apache.activemq.command.ConsumerInfo info)protected org.apache.activemq.command.NetworkBridgeFiltercreateNetworkBridgeFilter(org.apache.activemq.command.ConsumerInfo info)protected DemandSubscriptiondoCreateDemandSubscription(org.apache.activemq.command.ConsumerInfo info)voidduplexStart(TransportConnection connection, org.apache.activemq.command.BrokerInfo localBrokerInfo, org.apache.activemq.command.BrokerInfo remoteBrokerInfo)protected org.apache.activemq.ServicegetControllingService()longgetDequeueCounter()org.apache.activemq.command.ActiveMQDestination[]getDurableDestinations()org.apache.activemq.command.ActiveMQDestination[]getDynamicallyIncludedDestinations()longgetEnqueueCounter()org.apache.activemq.command.ActiveMQDestination[]getExcludedDestinations()StringgetLocalAddress()org.apache.activemq.transport.TransportgetLocalBroker()StringgetLocalBrokerName()ConcurrentMap<org.apache.activemq.command.ConsumerId,DemandSubscription>getLocalSubscriptionMap()ObjectNamegetMbeanObjectName()NetworkBridgeStatisticsgetNetworkBridgeStatistics()protected Collection<Subscription>getRegionSubscriptions(org.apache.activemq.command.ActiveMQDestination dest)StringgetRemoteAddress()org.apache.activemq.transport.TransportgetRemoteBroker()StringgetRemoteBrokerId()StringgetRemoteBrokerName()protected org.apache.activemq.command.BrokerId[]getRemoteBrokerPath()org.apache.activemq.command.ActiveMQDestination[]getStaticallyIncludedDestinations()protected longgetStoredSequenceIdForMessage(org.apache.activemq.command.MessageId messageId)booleanisCreatedByDuplex()protected booleanisDirectBridgeConsumer(org.apache.activemq.command.ConsumerInfo info)Checks whether or not this consumer is a direct bridge network subscriptionprotected booleanisDuplex()protected booleanisPermissableDestination(org.apache.activemq.command.ActiveMQDestination destination)protected booleanisPermissableDestination(org.apache.activemq.command.ActiveMQDestination destination, boolean allowTemporary)protected booleanisProxyBridgeSubscription(String clientId, String subName)protected booleanisProxyNSConsumerBrokerPath(org.apache.activemq.command.ConsumerInfo info)protected booleanisProxyNSConsumerClientId(String clientId)protected voidremoveDemandSubscription(org.apache.activemq.command.ConsumerId id)protected booleanremoveDemandSubscriptionByLocalId(org.apache.activemq.command.ConsumerId consumerId)protected voidremoveSubscription(DemandSubscription sub)voidresetStats()protected booleansafeWaitUntilStarted()Performs a timed wait on the started latch and then checks for disposed before performing another wait each time the the started wait times out.protected voidserviceInboundMessage(org.apache.activemq.command.Message message)protected voidserviceLocalCommand(org.apache.activemq.command.Command command)voidserviceLocalException(Throwable error)Service an exception received from the Local Broker connection.voidserviceLocalException(org.apache.activemq.command.MessageDispatch messageDispatch, Throwable error)protected voidserviceOutbound(org.apache.activemq.command.Message message)protected voidserviceRemoteCommand(org.apache.activemq.command.Command command)voidserviceRemoteException(Throwable error)Service an exception received from the Remote Broker connection.voidsetBrokerService(BrokerService brokerService)voidsetCreatedByDuplex(boolean createdByDuplex)voidsetDurableDestinations(org.apache.activemq.command.ActiveMQDestination[] durableDestinations)voidsetDynamicallyIncludedDestinations(org.apache.activemq.command.ActiveMQDestination[] dynamicallyIncludedDestinations)voidsetExcludedDestinations(org.apache.activemq.command.ActiveMQDestination[] excludedDestinations)voidsetMbeanObjectName(ObjectName objectName)voidsetNetworkBridgeListener(NetworkBridgeListener listener)Set the NetworkBridgeFailedListenervoidsetStaticallyIncludedDestinations(org.apache.activemq.command.ActiveMQDestination[] staticallyIncludedDestinations)protected voidsetupStaticDestinations()Subscriptions for these destinations are always createdvoidstart()protected voidstartRemoteBridge()voidstop()protected voidtriggerStartAsyncNetworkBridgeCreation()
-
-
-
Field Detail
-
DURABLE_SUB_PREFIX
protected static final String DURABLE_SUB_PREFIX
- See Also:
- Constant Field Values
-
localBroker
protected final org.apache.activemq.transport.Transport localBroker
-
remoteBroker
protected final org.apache.activemq.transport.Transport remoteBroker
-
idGenerator
protected org.apache.activemq.util.IdGenerator idGenerator
-
consumerIdGenerator
protected final org.apache.activemq.util.LongSequenceGenerator consumerIdGenerator
-
localConnectionInfo
protected org.apache.activemq.command.ConnectionInfo localConnectionInfo
-
remoteConnectionInfo
protected org.apache.activemq.command.ConnectionInfo remoteConnectionInfo
-
localSessionInfo
protected org.apache.activemq.command.SessionInfo localSessionInfo
-
producerInfo
protected org.apache.activemq.command.ProducerInfo producerInfo
-
remoteBrokerName
protected String remoteBrokerName
-
localClientId
protected String localClientId
-
demandConsumerInfo
protected org.apache.activemq.command.ConsumerInfo demandConsumerInfo
-
demandConsumerDispatched
protected int demandConsumerDispatched
-
localBridgeStarted
protected final AtomicBoolean localBridgeStarted
-
remoteBridgeStarted
protected final AtomicBoolean remoteBridgeStarted
-
bridgeFailed
protected final AtomicBoolean bridgeFailed
-
disposed
protected final AtomicBoolean disposed
-
localBrokerId
protected org.apache.activemq.command.BrokerId localBrokerId
-
excludedDestinations
protected org.apache.activemq.command.ActiveMQDestination[] excludedDestinations
-
dynamicallyIncludedDestinations
protected org.apache.activemq.command.ActiveMQDestination[] dynamicallyIncludedDestinations
-
staticallyIncludedDestinations
protected org.apache.activemq.command.ActiveMQDestination[] staticallyIncludedDestinations
-
durableDestinations
protected org.apache.activemq.command.ActiveMQDestination[] durableDestinations
-
subscriptionMapByLocalId
protected final ConcurrentMap<org.apache.activemq.command.ConsumerId,DemandSubscription> subscriptionMapByLocalId
-
subscriptionMapByRemoteId
protected final ConcurrentMap<org.apache.activemq.command.ConsumerId,DemandSubscription> subscriptionMapByRemoteId
-
forcedDurableRemoteId
protected final Set<org.apache.activemq.command.ConsumerId> forcedDurableRemoteId
-
localBrokerPath
protected final org.apache.activemq.command.BrokerId[] localBrokerPath
-
startedLatch
protected final CountDownLatch startedLatch
-
localStartedLatch
protected final CountDownLatch localStartedLatch
-
staticDestinationsLatch
protected final CountDownLatch staticDestinationsLatch
-
lastConnectSucceeded
protected final AtomicBoolean lastConnectSucceeded
-
configuration
protected NetworkBridgeConfiguration configuration
-
defaultFilterFactory
protected final NetworkBridgeFilterFactory defaultFilterFactory
-
remoteBrokerPath
protected final org.apache.activemq.command.BrokerId[] remoteBrokerPath
-
remoteBrokerId
protected org.apache.activemq.command.BrokerId remoteBrokerId
-
networkBridgeStatistics
protected final NetworkBridgeStatistics networkBridgeStatistics
-
brokerService
protected BrokerService brokerService
-
-
Constructor Detail
-
DemandForwardingBridgeSupport
public DemandForwardingBridgeSupport(NetworkBridgeConfiguration configuration, org.apache.activemq.transport.Transport localBroker, org.apache.activemq.transport.Transport remoteBroker)
-
-
Method Detail
-
duplexStart
public void duplexStart(TransportConnection connection, org.apache.activemq.command.BrokerInfo localBrokerInfo, org.apache.activemq.command.BrokerInfo remoteBrokerInfo) throws Exception
- Throws:
Exception
-
start
public void start() throws Exception- Specified by:
startin interfaceorg.apache.activemq.Service- Throws:
Exception
-
stop
public void stop() throws Exception- Specified by:
stopin interfaceorg.apache.activemq.Service- Throws:
Exception
-
triggerStartAsyncNetworkBridgeCreation
protected void triggerStartAsyncNetworkBridgeCreation() throws IOException- Throws:
IOException
-
serviceRemoteException
public void serviceRemoteException(Throwable error)
Description copied from interface:NetworkBridgeService an exception received from the Remote Broker connection.- Specified by:
serviceRemoteExceptionin interfaceNetworkBridge
-
isDirectBridgeConsumer
protected boolean isDirectBridgeConsumer(org.apache.activemq.command.ConsumerInfo info)
Checks whether or not this consumer is a direct bridge network subscription- Parameters:
info-- Returns:
-
isProxyBridgeSubscription
protected boolean isProxyBridgeSubscription(String clientId, String subName)
-
addProxyNetworkSubscriptionClientId
protected void addProxyNetworkSubscriptionClientId(DemandSubscription sub, String clientId, String subName)
This scenaior is primarily used for durable sync on broker restarts- Parameters:
sub-clientId-subName-
-
addProxyNetworkSubscriptionBrokerPath
protected void addProxyNetworkSubscriptionBrokerPath(DemandSubscription sub, org.apache.activemq.command.BrokerId[] path, String subName)
Add a durable remote proxy subscription when we can generate via the BrokerId path This is the most common scenario- Parameters:
sub-path-subName-
-
isProxyNSConsumerBrokerPath
protected boolean isProxyNSConsumerBrokerPath(org.apache.activemq.command.ConsumerInfo info)
-
isProxyNSConsumerClientId
protected boolean isProxyNSConsumerClientId(String clientId)
-
serviceRemoteCommand
protected void serviceRemoteCommand(org.apache.activemq.command.Command command)
-
serviceLocalException
public void serviceLocalException(Throwable error)
Description copied from interface:NetworkBridgeService an exception received from the Local Broker connection.- Specified by:
serviceLocalExceptionin interfaceNetworkBridge
-
serviceLocalException
public void serviceLocalException(org.apache.activemq.command.MessageDispatch messageDispatch, Throwable error)
-
getControllingService
protected org.apache.activemq.Service getControllingService()
-
addSubscription
protected void addSubscription(DemandSubscription sub) throws IOException
- Throws:
IOException
-
removeSubscription
protected void removeSubscription(DemandSubscription sub) throws IOException
- Throws:
IOException
-
configureMessage
protected org.apache.activemq.command.Message configureMessage(org.apache.activemq.command.MessageDispatch md) throws IOException- Throws:
IOException
-
serviceLocalCommand
protected void serviceLocalCommand(org.apache.activemq.command.Command command)
-
contains
public static boolean contains(org.apache.activemq.command.BrokerId[] brokerPath, org.apache.activemq.command.BrokerId brokerId)
-
appendToBrokerPath
protected org.apache.activemq.command.BrokerId[] appendToBrokerPath(org.apache.activemq.command.BrokerId[] brokerPath, org.apache.activemq.command.BrokerId[] pathsToAppend)
-
appendToBrokerPath
protected org.apache.activemq.command.BrokerId[] appendToBrokerPath(org.apache.activemq.command.BrokerId[] brokerPath, org.apache.activemq.command.BrokerId idToAppend)
-
isPermissableDestination
protected boolean isPermissableDestination(org.apache.activemq.command.ActiveMQDestination destination)
-
isPermissableDestination
protected boolean isPermissableDestination(org.apache.activemq.command.ActiveMQDestination destination, boolean allowTemporary)
-
setupStaticDestinations
protected void setupStaticDestinations()
Subscriptions for these destinations are always created
-
addConsumerInfo
protected void addConsumerInfo(org.apache.activemq.command.ConsumerInfo consumerInfo) throws IOException- Throws:
IOException
-
getRegionSubscriptions
protected final Collection<Subscription> getRegionSubscriptions(org.apache.activemq.command.ActiveMQDestination dest)
-
createDemandSubscription
protected DemandSubscription createDemandSubscription(org.apache.activemq.command.ConsumerInfo info) throws IOException
- Throws:
IOException
-
doCreateDemandSubscription
protected DemandSubscription doCreateDemandSubscription(org.apache.activemq.command.ConsumerInfo info) throws IOException
- Throws:
IOException
-
createDemandSubscription
protected final DemandSubscription createDemandSubscription(org.apache.activemq.command.ActiveMQDestination destination, String subscriptionName)
-
configureDemandSubscription
protected void configureDemandSubscription(org.apache.activemq.command.ConsumerInfo info, DemandSubscription sub) throws IOException- Throws:
IOException
-
removeDemandSubscription
protected void removeDemandSubscription(org.apache.activemq.command.ConsumerId id) throws IOException- Throws:
IOException
-
removeDemandSubscriptionByLocalId
protected boolean removeDemandSubscriptionByLocalId(org.apache.activemq.command.ConsumerId consumerId)
-
safeWaitUntilStarted
protected boolean safeWaitUntilStarted() throws InterruptedExceptionPerforms a timed wait on the started latch and then checks for disposed before performing another wait each time the the started wait times out.- Throws:
InterruptedException
-
createNetworkBridgeFilter
protected org.apache.activemq.command.NetworkBridgeFilter createNetworkBridgeFilter(org.apache.activemq.command.ConsumerInfo info) throws IOException- Throws:
IOException
-
addRemoteBrokerToBrokerPath
protected void addRemoteBrokerToBrokerPath(org.apache.activemq.command.ConsumerInfo info) throws IOException- Throws:
IOException
-
getRemoteBrokerPath
protected org.apache.activemq.command.BrokerId[] getRemoteBrokerPath()
-
setNetworkBridgeListener
public void setNetworkBridgeListener(NetworkBridgeListener listener)
Description copied from interface:NetworkBridgeSet the NetworkBridgeFailedListener- Specified by:
setNetworkBridgeListenerin interfaceNetworkBridge
-
getDynamicallyIncludedDestinations
public org.apache.activemq.command.ActiveMQDestination[] getDynamicallyIncludedDestinations()
- Returns:
- Returns the dynamicallyIncludedDestinations.
-
setDynamicallyIncludedDestinations
public void setDynamicallyIncludedDestinations(org.apache.activemq.command.ActiveMQDestination[] dynamicallyIncludedDestinations)
- Parameters:
dynamicallyIncludedDestinations- The dynamicallyIncludedDestinations to set.
-
getExcludedDestinations
public org.apache.activemq.command.ActiveMQDestination[] getExcludedDestinations()
- Returns:
- Returns the excludedDestinations.
-
setExcludedDestinations
public void setExcludedDestinations(org.apache.activemq.command.ActiveMQDestination[] excludedDestinations)
- Parameters:
excludedDestinations- The excludedDestinations to set.
-
getStaticallyIncludedDestinations
public org.apache.activemq.command.ActiveMQDestination[] getStaticallyIncludedDestinations()
- Returns:
- Returns the staticallyIncludedDestinations.
-
setStaticallyIncludedDestinations
public void setStaticallyIncludedDestinations(org.apache.activemq.command.ActiveMQDestination[] staticallyIncludedDestinations)
- Parameters:
staticallyIncludedDestinations- The staticallyIncludedDestinations to set.
-
getDurableDestinations
public org.apache.activemq.command.ActiveMQDestination[] getDurableDestinations()
- Returns:
- Returns the durableDestinations.
-
setDurableDestinations
public void setDurableDestinations(org.apache.activemq.command.ActiveMQDestination[] durableDestinations)
- Parameters:
durableDestinations- The durableDestinations to set.
-
getLocalBroker
public org.apache.activemq.transport.Transport getLocalBroker()
- Returns:
- Returns the localBroker.
-
getRemoteBroker
public org.apache.activemq.transport.Transport getRemoteBroker()
- Returns:
- Returns the remoteBroker.
-
isCreatedByDuplex
public boolean isCreatedByDuplex()
- Returns:
- the createdByDuplex
-
setCreatedByDuplex
public void setCreatedByDuplex(boolean createdByDuplex)
- Parameters:
createdByDuplex- the createdByDuplex to set
-
getRemoteAddress
public String getRemoteAddress()
- Specified by:
getRemoteAddressin interfaceNetworkBridge- Returns:
- the network address of the remote broker connection.
-
getLocalAddress
public String getLocalAddress()
- Specified by:
getLocalAddressin interfaceNetworkBridge- Returns:
- the network address of the local broker connection.
-
getRemoteBrokerName
public String getRemoteBrokerName()
- Specified by:
getRemoteBrokerNamein interfaceNetworkBridge- Returns:
- the name of the remote broker this bridge is connected to.
-
getRemoteBrokerId
public String getRemoteBrokerId()
- Specified by:
getRemoteBrokerIdin interfaceNetworkBridge- Returns:
- the id of the remote broker this bridge is connected to.
-
getLocalBrokerName
public String getLocalBrokerName()
- Specified by:
getLocalBrokerNamein interfaceNetworkBridge- Returns:
- the name of the local broker this bridge is connected to.
-
getDequeueCounter
public long getDequeueCounter()
- Specified by:
getDequeueCounterin interfaceNetworkBridge- Returns:
- the current number of dequeues this bridge has.
-
getEnqueueCounter
public long getEnqueueCounter()
- Specified by:
getEnqueueCounterin interfaceNetworkBridge- Returns:
- the current number of enqueues this bridge has.
-
getNetworkBridgeStatistics
public NetworkBridgeStatistics getNetworkBridgeStatistics()
- Specified by:
getNetworkBridgeStatisticsin interfaceNetworkBridge- Returns:
- the statistics for this NetworkBridge
-
isDuplex
protected boolean isDuplex()
-
getLocalSubscriptionMap
public ConcurrentMap<org.apache.activemq.command.ConsumerId,DemandSubscription> getLocalSubscriptionMap()
-
setBrokerService
public void setBrokerService(BrokerService brokerService)
- Specified by:
setBrokerServicein interfaceBrokerServiceAware
-
setMbeanObjectName
public void setMbeanObjectName(ObjectName objectName)
- Specified by:
setMbeanObjectNamein interfaceNetworkBridge- Parameters:
objectName- The ObjectName assigned to this bridge in the MBean server.
-
getMbeanObjectName
public ObjectName getMbeanObjectName()
- Specified by:
getMbeanObjectNamein interfaceNetworkBridge- Returns:
- the MBean name used to identify this bridge in the MBean server.
-
resetStats
public void resetStats()
- Specified by:
resetStatsin interfaceNetworkBridge
-
serviceOutbound
protected void serviceOutbound(org.apache.activemq.command.Message message)
-
serviceInboundMessage
protected void serviceInboundMessage(org.apache.activemq.command.Message message)
-
canDuplexDispatch
protected boolean canDuplexDispatch(org.apache.activemq.command.Message message)
-
getStoredSequenceIdForMessage
protected long getStoredSequenceIdForMessage(org.apache.activemq.command.MessageId messageId)
-
configureConsumerPrefetch
protected void configureConsumerPrefetch(org.apache.activemq.command.ConsumerInfo consumerInfo)
-
-