Ich habe einen JMS-Client, der nach Empfang einer Nachricht ssh Remote-Systemen kann (und verschiedene Dinge dort tun - nicht relevant für die Frage). Es ist möglich, dass Hunderte solcher Nachrichten in einer kurzen Zeitspanne ankommen, die SOFORT verarbeitet werden muss.JMS-Nachricht Re-Delivery-Verzögerung
Es ist jedoch auch möglich, dass bestimmte entfernte Systeme nicht verfügbar sind, wenn die Nachricht empfangen wird, daher sollten sie auf später verschoben werden (z. B. 1 Stunde oder so). Die beste Lösung wäre es, die Nachricht mit einem gewissen "Verzögerungs" -Wert zurück in die Warteschlange zu stellen, was dem JMS-Broker sagt, dass er nicht versuchen soll, die Nachricht innerhalb einer Stunde erneut zuzustellen.
Was ist nicht OK: Schlaf im Empfangsfaden und wache eine Stunde später auf. Da der Nachrichtenverbraucherpool begrenzt ist (z. B. 8 verfügbare Verbindungen) mit 8 nicht erreichbaren Systemen würde die gesamte Verarbeitung unnötig blockieren, was inakzeptabel ist.
Ich habe keine Einstellung für die Nachricht oder die Warteschlange selbst für einen solchen "Verzögerung" -Wert gefunden, existiert es?
Eine Problemumgehung Lösung besteht darin, eine zweite Warteschlange zu dem Speichern von Nachrichten zu unerreichbaren Systemen zu verwenden, und diese separat zu verarbeiten. Aber es ist keine sehr elegante Lösung und erfordert zusätzliche Programmierung. Vielleicht gibt es einen besseren Weg.
Das ist eine informative Antwort, danke. – egbokul
Ich nehme an, das war nur für JMS 1.0 wahr? (Vgl. Shashis Antwort) – jpaugh
Yup. Die neuen MQ JMS-Klassen unterstützen die verzögerte Zustellung. –