Hi Felix,

I did try 'reliable:tcp://...' but that didn't work, the url wasn't accepted. I didn't think to use failover on a single connection. But I did resolve the issue for now by altering the spring-configuration to only cache connections rather than also cache the entire consumer.

Spring's container already should reconnect if the connection doesn't work, but somehow it didn't get that knowledge in the default configuration from the connection. There was an exception thrown inside the Transport, but somewhere along the line it got caught.

With the adjusted caching approach it apparently now does get that knowledge, probably because it does more checks. And now I do get new connections when ActiveMQ goes away, so probably also for any other reason the library might loose its connection.

In case anyone wants to reproduce this, its relatively easy to do; just use some configuration similar to the one I sent earlier and enable debug/trace logging for activemq in the client. You'll see a flow of keep-alive messages sent back and forth. If you then disable the activemq-server, the flow will obviously stop. But with the cache at connection level you'll see reconnection-attempts from spring and as soon as the server is available again a new connection is made. With the cache at 'auto' (consumer) no new messages appear once the connection is gone.

Best regards,

Arjen

On 5-10-2009 8:11, fehm wrote:
Hi Arjen,

did you try to enable failover transport mechanism :
http://activemq.apache.org/failover-transport-reference.html
This will enable the client to reconnect in case of disconnection. the
default transport url you use will NOT automatically reconnect.

Cheers,
Felix



Arjen van der Meijden wrote:
Noone with an idea? Do I need to supply more information and/or do more testing?

Best regards,

Arjen

On 25-9-2009 9:09, Arjen van der Meijden wrote:
Hi List,

I have some topics with very few messages (it can be days or weeks before a message arrives) on it. The consumers to those topics disconnect after some time and don't reconnect afterwards. I have no idea where to put the blame (activemq-server, activemq-consumer, spring?), but I'd like those consumers to just sit and wait rather than decide to leave after a while (or get booted from the server).

The disconnect-behaviour doesn't seem to be too consistent as I've connected a test-consumer to a test-activemq where I'm pretty sure there was no traffic on any of the topics last night and of the 8 topics only 3 have disconnected so far according to the webbased admin.

I'm using ActiveMQ 5.2 where the topic-consumption is handled via Spring's default jms-handling:

<bean id="amqFact" class="org.apache.activemq.ActiveMQConnectionFactory">
 <constructor-arg value="${jms.username}" />
 <constructor-arg value="${jms.password}" />
 <constructor-arg value="${jms.url}" />
</bean>

<jms:listener-container connection-factory="amqFact" destination-type="topic">
  <jms:listener destination="topicname" ref="someMessageListenerImpl" />
  <!--  and seven more topics -->
</jms:listener-container>

The configured url is tcp://hostname:61616 with no added parameters.

ActiveMQ itself is mostly left to its defaults, although openWire is configured like (i.e. with the added transport.closeAsync): <transportConnector name="openwire" uri="tcp://localhost:61616?transport.closeAsync=false" discoveryUri="multicast://default"/>

Which flag/configuration on which side is responsible for this behaviour? And how do I change it?

Best regards,

Arjen






Reply via email to