Oracle
 sql >> Database >  >> RDS >> Oracle

Approccio corretto per inizializzare un listener JMS asincrono e lasciarlo funzionare all'infinito

Non c'è motivo di eseguire un thread per creare un consumatore JMS e impostare il suo listener di messaggi. Il punto centrale di un listener di messaggi JMS è ricevere il messaggio in modo asincrono (funzionalità che sembra che tu stia tentando di duplicare per qualche motivo).

Devi semplicemente creare il consumer JMS e impostare il listener di messaggi e quindi assicurarti che il consumer non sia chiuso. A seconda di come viene scritta l'applicazione, a volte è necessario avere un while loop per assicurarsi che il programma non termini e quindi chiudere il consumer. Il tuo thread non lo sta facendo. Sta lasciando che il consumatore esca dall'ambito dopo aver atteso i messaggi per 5 secondi, il che significa che verrà raccolto i rifiuti e mi aspetto che per la maggior parte delle implementazioni JMS ciò significhi che verrà chiuso. Potrebbe essere peggio di così, però. Non chiudendo esplicitamente il consumatore e lasciandolo semplicemente fuori portata, potresti perdere consumatori che alla fine impantanerebbero il tuo broker di messaggi. Questa non è solo una programmazione sciatta, ma potenzialmente problematica per altri utenti che cercano di consumare messaggi.