aufgerufen Ich verwende Apache Camel mit Spring, um Nachrichten von meinem Java-Dienst zu senden. Ich muss zurücksetzen JMS-Verbindung im Falle eines Fehlers beim Austausch aufgetreten. Ich verwende den folgenden Code, um mein Ziel zu erreichen.JMS CachingConnectionFactory onException-Methode wird niemals bei JMSException
try
{
producerTemplate.sendBody(endPoint, bytes);
}
catch (final RuntimeCamelException exception)
{
LOGGER.error("Exception occured in sendBody", exception.getMessage(), exception);
handleError(); // handle error here.
}
In Kamel Zusammenhang I CachingConnectionFactory mit Ausnahme Hörer und machte reconnectOnException = true
<bean id="testConnectionFactory" class="org.apache.qpid.jms.JmsConnectionFactory">
<property name="username" value="${user.name}" />
<property name="password" value="${user.password}" />
<property name="clientID" value="${host.address}" />
<property name="remoteURI"
value="amqp://${host.address}:${host.port}?jms.clientID=${host.address}?jms.username=${user.name}&jms.password=${user.password}&jms.redeliveryPolicy.maxRedeliveries=${message.retry.count}&amqp.saslMechanisms=PLAIN" />
</bean>
<bean id="testCachingConnectionFactory"
class="org.springframework.jms.connection.CachingConnectionFactory">
<property name="exceptionListener" ref="testCachingConnectionFactory" />
<property name="targetConnectionFactory" ref="testConnectionFactory" />
<property name="reconnectOnException" value="true" />
</bean>
In meinem Fall JMSSecurityException geworfen von Try-Block unterhalb Linie
definiert habenproducerTemplate.sendBody(endPoint, bytes)
Ausführung geht in Catch-Block, aber OnException () von SingleConnectionFactory wird nie aufgerufen, obwohl exceptionListener definiert ist. Die Idee ist, resetConnection() (innerhalb OnException) aufzurufen, um die JMS-Verbindung zurückzusetzen.
CachingConnectionFactory der Elternklasse SingleConnectionFactory selbst Exception implementiert ... so brauchen wir keine eigene Klasse zu erstellen. –