Hi,

We have a simple single-server ActiveMQ-setup with multiple consumers, some of which use Java and connect via JMS. As the ActiveMQ-server might some times need a restart or some other down time we configured it to use the failover protocol (failover:tcp://localhost:61616), so it will reconnect as soon as its available again and will also keep the connection alive when there are long periods of silence.

All this is managed via Spring's normal connection handling.

This works fine, unless the ActiveMQ-server is not available during the initial start. Rather than just going into the background and waiting for the availability of a connection it blocks the start-up without any error message. In my case its a spring-managed Servlet that will receive some cache-update messages via jsm-topics. But rather than connecting in the background to activemq, the entire Tomcat-instance is blocked and although it will accept new http-connections, it will do absolutely nothing with them.

My spring-configuration is like this:

<bean id="amqfactory" class="o.a.activemq.ActiveMQConnectionFactory">
 <constructor-arg value="" /> <!-- username -->
 <constructor-arg value="" /> <!-- password -->
 <constructor-arg value="failover:tcp://localhost:61616" /> <!-- broker -->
</bean>

<jms:listener-container connection-factory="amqfactory" destination-type="topic">
 <jms:listener destination="some_topic" ref="someMessageListener" />
</jms:listener-container>

I'm not really sure what the best solution would be, but I'd expect to get some ERROR-message at the very least. It is the reason my application won't start indefinitely (or until activemq is started, whichever comes first). Its something you easily overlook during debugging and it is very hard to detect when you don't know what you're looking for (or even if you do, but just forget to check activemq is running and/or a connection is made). Logging should be possible, as I do get these kind of messages if it does work:

2010-07-02 09:36:00,095 [ActiveMQ Task] INFO o.a.activemq.transport.failover.FailoverTransport - Successfully connected to tcp://localhost:61616

Perhaps the easiest fix would be to display a ERROR-message the first time it can't connect and than fall back to DEBUG-messages.

Best regards,

Arjen

Reply via email to