Wie kann ich konfigurieren Sie die Rückgabe-Politik auf eine-Datei-zu-queue-Camel-route?
Ich so konfiguriert haben, dass ein Kamel route für die übertragung von Dateien von einem Verzeichnis auf einem ActiveMQ-queue.
public class DemoHelperRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
onException(JmsException.class, ConnectException.class)
.routeId("ConnectionExceptionRoute")
.handled(true)
.log(LoggingLevel.ERROR, "Connection Error")
.maximumRedeliveries(5)
.redeliveryDelay(1000)
.backOffMultiplier(2)
.useExponentialBackOff()
.maximumRedeliveryDelay(60000)
.log(LoggingLevel.DEBUG, "Rolling back!")
.rollback();
errorHandler(defaultErrorHandler()
.maximumRedeliveries(20).redeliveryDelay(7000).retryAttemptedLogLevel(LoggingLevel.INFO));
from("file:{{directory.property}}?delete=true&readLock=markerFile&delay=5000")
.log("Passing File")
.transacted("PROPAGATION_REQUIRED")
.setHeader("FILE_TYPE", constant("MYTYPE"))
.setHeader("MSG_ID", constant("55"))
.to("activemq:{{MY.QUEUE}}");
}
}
Mein Kamel Kontext-Datei sieht wie folgt aus:
<!-- This is the default behavior. -->
<bean id="PROPAGATION_REQUIRED" class="org.apache.camel.spring.spi.SpringTransactionPolicy">
<property name="transactionManager" ref="jmsTransactionManager"/>
</bean>
<bean id="PROPAGATION_REQUIRES_NEW" class="org.apache.camel.spring.spi.SpringTransactionPolicy">
<property name="transactionManager" ref="jmsTransactionManager"/>
<property name="propagationBehaviorName" value="PROPAGATION_REQUIRES_NEW"/>
</bean>
<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
<property name="connectionFactory" ref="jmsConnectionFactory"></property>
<property name="transacted" value="true"/>
<property name="transactionManager" ref="jmsTransactionManager"/>
</bean>
<bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="${jms.broker.url}"/>
<property name="redeliveryPolicy">
<bean class="org.apache.activemq.RedeliveryPolicy">
<property name="maximumRedeliveries" value="-1" />
<property name="redeliveryDelay" value="10000" />
</bean>
</property>
</bean>
Ich habe mehrere andere Routen, die zwischen einer Vielzahl von verschiedenen Endpunkten in der Anwendung, die erfordern eine erneute Zustellung Konfiguration und Verhalten sich wie erwartet. Jedoch, diese Besondere Art der route (aus Datei queue) scheint nicht zu befolgen Sie die Rückgabe-Richtlinien habe ich konfiguriert. Wenn ich unten den ActiveMQ-broker, die die route versucht, um wieder die Datei, die alle 6 Sekunden.:
10:54:09,979 | INFO | C_demo%5 | route6 | 105 - org.apache.camel.camel-core - 2.10.0.redhat-60024 | Passing-Datei
10:54:11,072 | WARNEN | C_demo%5 | TransactionErrorHandler | 105 - org.apache.camel.camel-core - 2.10.0.redhat-60024 | rollback der Transaktion (0x5757baa8) nachgeliefert(unbekannt) (MessageId: ID-3668-1385561154291-4-1 auf ExchangeId: ID-3668-1385561154291-4-2) gefangen: Konnte nicht erstellt JMS-Transaktion; nested exception is javax.jms.JMSException: es Konnte keine Verbindung zum broker URL: . Grund: java.net.ConnectException: Connection refused: connect
10:54:11,072 | WARNEN | C_demo%5 | GenericFileOnCompletion | 105 - org.apache.camel.camel-core - 2.10.0.redhat-60024 | Rollback-Datei-Strategie: org.apache.camel.component.file.strategy.GenericFileDeleteProcessStrategy@789d315e für die Datei: GenericFile[]
10:54:16,088 | INFO | C_demo%5C | route6 | 105 - org.apache.camel.camel-core - 2.10.0.redhat-60024 | Passing-Datei
10:54:17,088 | WARNEN | C_demo%5C | TransactionErrorHandler | 105 - org.apache.camel.camel-core - 2.10.0.redhat-60024 | rollback der Transaktion (0x5757baa8) nachgeliefert(unbekannt) (MessageId: ID-3668-1385561154291-4-3 auf ExchangeId: ID-3668-1385561154291-4-4) gefangen: Konnte nicht erstellt JMS-Transaktion; nested exception is javax.jms.JMSException: es Konnte keine Verbindung zum broker URL: . Grund: java.net.ConnectException: Connection refused: connect
10:54:17,088 | WARNEN | C_demo%5 | GenericFileOnCompletion | 105 - org.apache.camel.camel-core - 2.10.0.redhat-60024 | Rollback-Datei-Strategie: org.apache.camel.component.file.strategy.GenericFileDeleteProcessStrategy@789d315e für die Datei: GenericFile[]
Ich habe mir bei transactional client-Dokumentation und anderen Seiten, aber nicht in der Lage gewesen, eine Lösung zu finden. Wenn ich etwas verpasst haben, die mir sagt, wie dieses Problem zu lösen, bitte ich das zu entschuldigen. Irgendwelche Hinweise oder Unterlagen, die helfen könnte, dieses problem zu lösen wird sehr geschätzt. Danke!
InformationsquelleAutor Sergio | 2013-11-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich in der Lage, konfigurieren Sie die route durch die änderung der route leicht:
}
}
Sich die größte Veränderung kam, in die der camel context:
Diese Veränderungen erlauben Sie mir, zu konfigurieren, wie oft die route versucht zu senden Sie die Datei an die Warteschlange.
Ich war in der Lage, verwenden Sie diese links zur Hilfe:
Dank!
InformationsquelleAutor Sergio
Vom Fehlerbehandlung in Camel ich verstehen, das Kamel hat keinen Griff Transaktions-Fehler. Es sollte getan werden, durch die Schutzträger-system oder durch TransactionErrorHandler
InformationsquelleAutor Sergey