2016-09-02 4 views
0

Ich muss Nachricht Ablauf für meine Nachricht in einem JMS-Thema festlegen. Ich habe versucht, indem Sie die Eigenschaften der Methoden message.setJMSExpiration() und producer.getTimeToLive() festlegen. Aber ich glaube nicht, dass die Nachrichten, die ich gepostet habe, noch im Thema sind, das ich gepostet habe.JMS-Nachrichtenablauf funktioniert nicht

Meine Zweifel ist, ob diese Eigenschaften verwendet werden, um die abgemeldete Nachricht von Thema zu verwerfen, nachdem die Ablaufzeit angekommen ist? oder nach der Nachricht, die von einem bestimmten Teilnehmer abonniert wurde.

Ich habe Selektor verwendet, um den bestimmten Client zu identifizieren.

Wenn eine der oben genannten Eigenschaften nicht ausreicht, um die Nachricht ablaufen zu lassen, brauche ich dann eine andere Konfiguration, damit die Nachricht auf der Herstellerseite abläuft?

Am Apache ActiveMQ 5.8.0 mit JDK 1.6

Antwort

0

Mein zwei Cent von Informationen. Hoffe, das hilft Ihnen, das Problem zu identifizieren, das Sie haben.

Es gibt zwei Arten von Abonnements: dauerhafte und nicht dauerhafte Abonnements und Abonnenten (oder Anwendungen, die Abonnements erstellen) werden als dauerhafte bzw. nicht dauerhafte Abonnenten bezeichnet.

Nicht dauerhafte Abonnenten erhalten Publikationen, solange die Anwendungen ausgeführt werden. Dauerhafte Abonnements erhalten Publikationen, selbst wenn die empfangenden Anwendungen nicht ausgeführt werden. Dauerhafte Subskriptionen werden durch Speicher gesichert (normalerweise Warteschlangen), und Messaging-Provider legen die Publikationen in den Speicher, wenn Anwendungen nicht ausgeführt werden.

Wenn für ein Thema keine Subskriptionen vorliegen, verwirft der Messaging-Provider die Publikation einfach.

Message Ablauf (a.k.a TimeToLive) gilt für beide Arten von Abonnements. Wenn die Teilnehmeranwendung vor Ablauf keine Nachrichten empfängt, verfallen solche Nachrichten und werden nicht an die empfangende Anwendung geliefert.

Nachrichten können nur ablaufen, nachdem der Produzent Nachrichtenanbieter veröffentlicht hat.

+0

Danke für Ihre Antwort. Aber das ist die Theorie, die ich durch einige Artikel über das Internet gegangen bin. Wie Sie gesagt haben, habe ich nur dauerhafte Abonnements angewendet. Weil mein Anliegen ist, mein Kunde keine Nachrichten zu verpassen, die vom Hersteller veröffentlicht wird. Mein Hauptanliegen ist, wenn der Client für längere Zeit nicht läuft, muss der Publisher die Nachricht ablaufen lassen, da der Client nicht länger nach Logs läuft. In diesem Zusammenhang wie ich Verleger zu sagen, die Nachricht nach Ablauf dieser Zeit ablaufen zu lassen, wenn der Abonnent die Nachricht nicht abonniert. –

+0

Sie sagen zwei Dinge - (1) Client sollte keine Nachricht verpassen und (2) Nachricht sollte nach einiger Zeit ablaufen - Beide widersprechen sich. Wenn Sie Ablaufdatum festlegen und der Client nicht innerhalb der Ablaufzeit fortgesetzt wird, wird der Client diese Veröffentlichung verpassen. In jedem Fall müssen Sie auf Publisher-Seite die Ablaufzeit für die Nachricht festlegen, bevor Sie sie veröffentlichen. Der Nachrichtenanbieter wird die Nachricht nach Ablauf der Ablaufzeit verwerfen. – Shashi

+0

In meinem Interesse sollte der Client keine Nachrichten verpassen, bis die Nachricht nur abläuft. Wegen einiger Sicherheitsprobleme. Innerhalb der Ablaufzeit, wenn der Client sein Abonnement gestartet hat, ist es kein Problem, die Nachricht zu erhalten. Also versuche ich, indem ich die Ablaufzeit auf der Publisher-Seite festlege. –

0

1) Pro JMS-Spezifikation, alle QoS-Einstellungen (Persistenz, Ablauf (auch bekannt als TTL) und Priorität muss auf dem Producer-Objekt festgelegt werden. Wenn auf dem Message-Objekt gesetzt, werden sie. Würde

2) ignoriert müssen Client-Code sehen, um den Wert der TTL zu überprüfen, ist korrekt festgelegt.

3) TTL-Wert ist die Zeit in Millisekunden bis zum Ablauf der Nachricht (d. H. 300000 für 5 Minuten), nicht die Zeit von EPOCH.

Verwandte Themen