Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Abordagem correta para inicializar um JMS Listener assíncrono e deixá-lo rodar infinitamente


Não há motivo para executar um encadeamento para criar um consumidor JMS e definir seu ouvinte de mensagem. O objetivo principal de um ouvinte de mensagem JMS é receber a mensagem de forma assíncrona (funcionalidade que você parece estar tentando duplicar por algum motivo).

Você simplesmente precisa criar o consumidor JMS e configurar o ouvinte de mensagens e, em seguida, garantir que o consumidor não esteja fechado. Dependendo de como o aplicativo é escrito, às vezes é necessário ter um while loop para garantir que o programa não termine e, portanto, feche o consumidor. Seu tópico não está fazendo isso. Está deixando o consumidor sair do escopo depois de esperar por mensagens por 5 segundos, o que significa que ele será coletado como lixo e espero que a maioria das implementações de JMS signifique que ele será fechado. Poderia ser pior do que isso, no entanto. Ao não fechar explicitamente o consumidor e apenas deixá-lo sair do escopo, você pode estar vazando consumidores, o que acabará por atolar seu agente de mensagens. Esta não é apenas uma programação desleixada, mas potencialmente problemática para outros usuários que tentam consumir mensagens.