Hi Leonardo,
I have used ActiveMQ and failover in production for years and not had
any issues. So my gut feeling is telling me this is something else.
Let's see if we can get this resolved without changing your architecture.
The default StartupTimeout is 30 seconds. If the broker is not started
within this period then TomEE startup will continue. I don't see where
it would wait forever? Can you perform a thread dump and see where it is
blocking in your startup if it takes longer than 30 seconds (or change
the StartupTimeout)?
<Resource id="MyJmsResourceAdapter" type="ActiveMQResourceAdapter">
BrokerXmlConfig = ServerUrl =
failover:(*nio*://s1:61616,*nio*://s2:61616)?randomize=*true*
*StartupTimeout = 5000*
</Resource>
Failover is purely an ActiveMQ client option, so we need to try and work
out where the blocking occurs. Even if both ActiveMQs are not running
this should not halt TomEE startup indefinitely.
The embedded ActiveMQ should not be a slave. If you want a local
ActiveMQ as a slave and a remote as the master then use the activemq.xml
configuration described here:
http://tomee.apache.org/jms-resources-and-mdb-container.html
Also, if 'randomize=false' is defined then *s1* should be the *master*,
or try setting it to true (the default) to see if that improves the
failover to the master. Failover defaults and details can be found here:
http://activemq.apache.org/failover-transport-reference.html
Andy.
On 25/10/2014 15:15, Leonardo K. Shikida wrote:
Hi Andy
If I've understood Romain well, setting a time to wait won't solve the
problem.
ActiveMQ server-slave failover works like that: the first server
becomes the master and serves, the slave server acquire a lock in the
DB and waits for the master server to release the lock to take over.
This may be forever if the master server never stops.
The problem here is that TomEE assumes (or it seems to assume) that if
the embedded JMS instance is not started, then it cannot start the
container itself, and it simply hangs forever during the
initialization. So, actually, the slave is somewhat started, because
it's just waiting for a lock, but somehow, I think this is not what
TomEE considers to be a "ready" state.
I'll have to change the current architecture to start these
master-slave JMS servers outside TomEE, although, I'd like to keep it
simpler. :-(
[]
Leo
On Sat, Oct 25, 2014 at 6:45 AM, Andy Gumbrecht
<[email protected] <mailto:[email protected]>> wrote:
And I'd suggest replacing 'tcp' with 'nio' for better performance.
Andy.
On 24/10/2014 22:47, Romain Manni-Bucau wrote:
I don't think so, we want to fail is broker doesn't start in
general
Romain Manni-Bucau
Twitter: @rmannibucau
Blog: http://rmannibucau.wordpress.com/
LinkedIn: http://fr.linkedin.com/in/rmannibucau
Github: https://github.com/rmannibucau
2014-10-24 22:37 GMT+02:00 Leonardo K. Shikida
<[email protected] <mailto:[email protected]>>:
is there any property I can set to let tomee start
regardless its embedded
jms acquires the lock or not?
[]
Leo
On Fri, Oct 24, 2014 at 6:04 PM, Romain Manni-Bucau
<[email protected] <mailto:[email protected]>>
wrote:
It is not shocking if second broker is configured
as a slave.
Most of the time such config are done with an external
amq to keep tomee
stateless
Le 24 oct. 2014 21:37, "Leonardo K. Shikida"
<[email protected] <mailto:[email protected]>> a écrit :
well, I am using BrokerXmlConfig=xbean:file... to
get the properties file
but then, here's the problem. While the first
tomee starts, the second
one
seems to wait for its embedded JMS to start. Since
it will be a slave
server, waiting for a lock, whole tomee also waits
for it to start...
so tomee does not start.
is that the expected behavior?
[]
Leo
On Fri, Oct 24, 2014 at 3:39 PM, Leonardo K.
Shikida <[email protected] <mailto:[email protected]>>
wrote:
Hi
I can run 2 tomee's using 2 external JMS
servers in the failover mode,
using a tomee.xml like this
<Resource id="MyJmsResourceAdapter"
type="ActiveMQResourceAdapter">
BrokerXmlConfig =
ServerUrl =
failover:(tcp://s1:61616,tcp://s2:61616)?randomize=false
</Resource>
If I want to start two embedded JMS servers,
one in each tomee, in a
failover mode, what's the syntax? I've been
trying this
<Resource id="MyJmsResourceAdapter"
type="ActiveMQResourceAdapter">
BrokerXmlConfig =
broker:(tcp://s1:61616)?persistent=true
ServerUrl =
failover:(tcp://s1:61616,tcp:/s2:61616)?randomize=false
DataSource = MyJmsDataSource
</Resource>
where MyJmsDataSource points to some JDBC
resource (must be the same
for
both). Of course, the other tomee declares its
broker in the
"BrokerXmlConfig"
But something is not right. I feel I am
missing something. Is this the
right syntax?
TIA
Leo
--
Andy Gumbrecht
https://twitter.com/AndyGeeDe
http://www.tomitribe.com
--
Andy Gumbrecht
https://twitter.com/AndyGeeDe
http://www.tomitribe.com