Ich breche meinen Kopf gegen die Wand, da ich keine Ahnung habe, warum die Transaktionen nicht zurückrollen.JMS-Message-Driven-Channel Adaper Rollback nicht die Transaktion
Ich bin mit Feder Integration in meinem Projekt und meine applicationContext.xml
sieht aus wie folgt:
<context:component-scan base-package="com.jms.spring.integration.*"></context:component-scan>
<tx:annotation-driven/>
<int:poller default="true" id="poller" fixed-delay="500"></int:poller>
<int-jms:message-driven-channel-adapter
channel="processEmpChannel" destination-name="com.test.inputqueue" acknowledge="transacted" connection-factory="targetConnectionFactory"/>
<bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://localhost:61616"></property>
</bean>
<bean id="springExample" class="com.jms.spring.integration.SpringIntegrationJmsExample">
</bean>
<int:service-activator input-channel="processEmpChannel"
ref="springExample" method="handleClient">
<int:poller ref="poller"></int:poller>
</int:service-activator>
Meine Java-Datei wie folgt aussieht:
package com.jms.spring.integration;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.transaction.annotation.Transactional;
public class SpringIntegrationJmsExample {
@Transactional
public void handleClient(String str){
System.out.println("handleClient");
throw new RuntimeException("Throwing some runtime exception....");
}
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
}
}
Als ich die Nachricht in der Warteschlange zu veröffentlichen, ich Sehen Sie die Ausnahme, aber die Nachricht in der Warteschlange wird verbraucht. Die Transaktion wird nicht zurückgesetzt und die Nachricht wird nicht in die Warteschlange gestellt. Bitte lassen Sie mich wissen, wo ich falsch liege.
Danke. Das hat wie ein Zauber funktioniert. Der AMQ versucht jedoch, 8 Mal zu liefern, und dann wird die Nachricht verbraucht. Wie konfiguriere ich, um die Nachricht, die auch nach 8 Versuchen fehlgeschlagen ist, in eine Warteschlange zu setzen? – zilcuanu
Das ist auf dem Broker konfiguriert; es ist nicht Teil der JMS-Spezifikation; Durchsuchen Sie die AMQ-Dokumente. –