Ich habe folgendes Setup: Tomcat mit eingebetteter ActiveMQIntegriert Tomcat mit ActiveMQ und Spring DefaultMessageListenerContainer - zu JMS msg wieder
Ich benutze Frühling Integrationen JmsMessageDrivenChannelAdapter
des Adapters zu schaffen, die Nachrichten von ActiveMQ Warteschlange verbraucht wie folgt:
Jms.messageDrivenChannelAdapter(jmsConnectionFactory, TransactedMessageListenerContainer.class)
.destination(destination)
.errorChannel(errorChannel)
.get();
wo TransactedMessageListenerContainer ist
public class TransactedMessageListenerContainer extends DefaultMessageListenerContainer {
public TransactedMessageListenerContainer() {
this.setSessionTransacted(true);
}
}
Wenn eine Ausnahme auftritt, gibt der ActiveMQ-Broker die Nachricht nicht erneut zurück.
Wenn ich org.apache.activemq.broker.BrokerService
für einfache Integrationstests, JMS-Nachrichten erneut zugestellt werden, das heißt ich Wiederholungsmechanismus
erreichen können Wie kann ich das gleiche für die Tomcat mit ActiveMQ erreichen?
fand ich hier: http://activemq.apache.org/tomcat.html, dass manuell Integration ActiveMQ mit Tomcat erlaubt für Topic, Queue und ConnectionFactory- Injektion aber nicht transaktionale Senden und Lieferung, aber ich bin nicht sicher, ob es eine Abhilfe ist oder nicht
unterstütztDanke für Hilfe!
UPDATE: ich auch rethrow Ausnahme in Fehlerbehandlung wie folgt:
@Bean
public IntegrationFlow errorHandlingFlow() {
return IntegrationFlows.from(IntegrationContextUtils.ERROR_CHANNEL_BEAN_NAME)
.handle(this::errorMessageHandler)
.get();
}
public void errorMessageHandler(Message<?> message) {
log.warn("handling error message");
log.warn("headers: " + message.getHeaders().toString());
log.warn("payload: " + message.getPayload().toString());
MessagingException exception = (MessagingException) message.getPayload();
log.warn("original payload: " + exception.getFailedMessage().getPayload());
throw exception; // make JMS broker redeliver
}
Ja, ich habe es so (ich aktualisierte die Beschreibung). Ich bin nicht sicher, warum es nicht funktioniert, wenn ActiveMQ in Tomcat eingebettet ist –
Bitte, sehen Sie ein Update in meiner Antwort. –
Hallo Artem, danke für dein Beispiel! Es öffnete mir die Augen :) Vor allem Header der fehlgeschlagenen Nachricht. Redelivery arbeitete von Anfang an für mich, ich verlor mich nur in den Logs und konnte keine Verbindungen zwischen Nachrichten und Flows herstellen, an die sie weitergeleitet wurden. Die einzige Sache, die jetzt fehlt, ist JMSXDeliveryCount msg -Eigenschaft, die nicht in der Redelivered-Nachricht enthalten ist –