2016-03-23 3 views
2

Ich bin neu zu ActiveMQ. Ich habe 2 queues: parser-queue und generation-queue. Meine Anwendung läuft in 2 verschiedene Server, beide sind hören zu den Warteschlangen. Mein Workflow ist recht einfach, erhalte die Nachricht von der Parser-Queue, bearbeite sie und lege nach Abschluss des Jobs eine weitere Nachricht in die Generierungswarteschlange.Wie Nachrichten in der Warteschlange mit ActiveMQ wiederherstellen, wenn meine Anwendung bricht?

Wenn jedoch während meines Arbeitsprozesses, die Nachricht erhalten und verarbeiten, wird meine Anwendung heruntergefahren, oder es bricht aus irgendeinem Grund.

Wie kann dieselbe Nachricht, die nicht korrekt verarbeitet wurde, erneut an meine Warteschlange gesendet werden, um verarbeitet zu werden?

Ich lese über Subscription Recovery Policy, aber es scheint ein sehr komplexes Thema, und ich bin mir nicht sicher, ob ich eine Richtlinie rechtzeitig verwenden möchte, da meine Jobs in der Zeit variieren können, vollständig von meiner Anwendung verarbeitet werden.

Antwort

4

Sie sollten die automatische Bestätigungsfunktion in Ihrem JMS-Benutzer deaktivieren. In diesem Fall wird die Nachricht erst dann konsumiert, wenn der Kunde sie bestätigt.

Wenn Sie Frühling verwenden, es kann dann wie folgt geschehen:

<bean id="myJmsConsumer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> 
    <property name="connectionFactory" ref="jmsFactory"/> 
    <property name="destinationName" value="MY_QUEUE"/> 
    <property name="messageListener" ref="myJmsListener"/> 
    <property name="sessionTransacted" value="false"/> 
    <property name="sessionAcknowledgeModeName" value="CLIENT_ACKNOWLEDGE"/> 
    <property name="exceptionListener" ref="exceptionListener"/> 
</bean> 

Mehr über JMS-Transaktion kann hier gefunden werden: http://www.javacodebook.com/2013/08/20/spring-book-chapter-17-messaging-with-spring/11/

+0

Du hast Recht Igor! Vielen Dank für Ihre Antwort! –

Verwandte Themen