Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Korrekter Ansatz, um einen asynchronen JMS-Listener zu initialisieren und unendlich laufen zu lassen

Es gibt keinen Grund, einen Thread auszuführen, um einen JMS-Verbraucher zu erstellen und seinen Nachrichten-Listener festzulegen. Der springende Punkt eines JMS-Nachrichten-Listeners besteht darin, Nachrichten asynchron zu empfangen (Funktionalität, die Sie anscheinend aus irgendeinem Grund zu duplizieren versuchen).

Sie müssen lediglich den JMS-Konsumenten erstellen und den Nachrichten-Listener festlegen und dann sicherstellen, dass der Konsument nicht geschlossen ist. Abhängig davon, wie die Anwendung geschrieben ist, ist manchmal ein while erforderlich -Schleife, um sicherzustellen, dass das Programm nicht beendet wird, und schließen Sie daher den Verbraucher. Das tut dein Thread nicht. Es lässt den Verbraucher aus dem Gültigkeitsbereich fallen, nachdem er 5 Sekunden lang auf Nachrichten gewartet hat, was bedeutet, dass er von der Garbage Collection erfasst wird, und ich gehe davon aus, dass dies für die meisten JMS-Implementierungen bedeutet, dass er geschlossen wird. Es könnte jedoch schlimmer sein. Indem Sie den Verbraucher nicht explizit schließen und ihn einfach aus dem Geltungsbereich fallen lassen, könnten Sie Verbraucher verlieren, die Ihren Nachrichtenbroker schließlich blockieren würden. Dies ist nicht nur schlampige Programmierung, sondern potenziell problematisch für andere Benutzer, die versuchen, Nachrichten zu konsumieren.