Gary, Torsten, and others have said in various places that broker-to-broker
networkConnectors should set maxReconnectAttempts=0 to allow reconnection
to be handled by the network bridge.  (Sources: 1
<http://tmielke.blogspot.com/2011/09/activemq-network-bridge-to-masterslave.html>,
2
<http://activemq.2283324.n4.nabble.com/Persistent-messages-disappearing-td4681353.html>,
3
<http://grokbase.com/t/activemq/users/1427v9eqkf/prioritybackup-not-supported-with-masterslave>)
Torsten (link 1) was talking about static: network connectors, while Gary's
quotes in the other two links were related to failover: (or masterslave:,
which is just chrome on top of failover:), but if it's a requirement of the
network bridge that it be the one to re-establish the question, it
shouldn't matter what the underlying transport is.

It's obvious in FailoverTransport
<http://grepcode.com/file/repo1.maven.org/maven2/org.apache.activemq/activemq-client/5.10.0/org/apache/activemq/transport/failover/FailoverTransport.java#FailoverTransport>
how maxReconnectAttempts=0 gets processed to mean "don't try to reconnect",
allowing the network bridge to re-establish the connection, and there are
notes in http://activemq.apache.org/failover-transport-reference.html
explaining that this interpretation of the value "0" was implemented in
5.6.0 (https://issues.apache.org/jira/browse/AMQ-3542).  There's no similar
code in SimpleDiscoveryAgent
<http://grepcode.com/file/repo1.maven.org/maven2/org.apache.activemq/activemq-all/5.10.0/org/apache/activemq/transport/discovery/simple/SimpleDiscoveryAgent.java#SimpleDiscoveryAgent>
(which handles connection attempts for the static: transport
<http://activemq.apache.org/static-transport-reference.html>, as I
understand it) to interpret "-1" as "reconnect forever" and "0" as "don't
reconnect".

Is Gary's and Torsten's advice about maxReconnectAttempts not applicable to
static: network connectors for some reason that I'm not understanding?  Or
should the changes Gary made in AMQ-3542 have been applied to all protocols
that include reconnection attempts?  (Do I need to open a JIRA for this?)

And a related question: when using the static: transport to establish a
broker mesh, if we set maxReconnectAttempts=0, is there a way to perform
exponential backoff at the network bridge, so it doesn't continually try to
reconnect (and spam the logs) when one broker in the mesh is offline for a
while?  The only way I see to control exponential backoff is within the
static: transport via the useExponentialBackOff=true option; searching the
source code (I'm looking at 5.8.0), I don't see any references to
exponential backoff in any code that seems to be related to network
bridges...

Thanks,
Tim

Reply via email to