2 Replies Latest reply on Feb 20, 2015 11:23 AM by luiz_gustavo

    JMS - Problemas com Subscribers Duráveis no JBoss 6.1

    luiz_gustavo

      Caros, boa tarde!

       

      Alguém sabe de algum bug conhecido do JBoss 6.1 relativo à consumidores de mensagens duráveis? Explico:

       

      Temos uma aplicação desktop que está homologada para troca de mensagens tanto para JBoss 6.x quanto para o JBoss EAP.

      Esta aplicação utilizava apenas filas de mensagens, mas houve uma necessidade utilização de tópicos com consumidores duráveis.

       

      Depois de implementada a modificação, durante os testes percebi um problema: o TopicSubscriber recebe as mensagens pendentes no tópico (enviados enquanto estava inativo) antes mesmo de eu chamar o start() na conexão. Percebi, fazendo a depuração na aplicação, que no exato momento em que crio o TopicSubscriber através da Session a mensagem é entregue para a aplicação pelo HornetQ, mas neste momento nem sequer adicionei um listener para o subscriber e nem chamei o start() na conexão.

       

      Para tirar a dúvida eu fiz o teste com o JBoss EAP, e tudo funcionou como esperado, a mensagem foi entregue à aplicação client apenas depois de chamar o start() na conexão.

       

       

      Bem, nem vou postar código aqui pois não tenho dúvidas com relação à implementação, uma vez que funcionou corretamente no JBoss EAP. Mas se acharem necessário posso postar como exemplo. Suspeito de um problema no JBoss 6.1, mas não encontro nenhuma referência.

       

       

      Abraços!

        • 1. Re: JMS - Problemas com Subscribers Duráveis no JBoss 6.1
          mauriciomag

          Olá Luis,

           

          Eu desconheço algum problema relacionado a isso. Essa versão do JBoss é a JBoss AS 6.1?

           

          Abs

          • 2. Re: JMS - Problemas com Subscribers Duráveis no JBoss 6.1
            luiz_gustavo

            Olá Mauricio,

             

            sim, a versão em que percebi o problema é a JBoss AS 6.1

            Fiz alguns testes, e descobri algo.

            No cliente desktop que consome as mensagens do tópico, quando eu faço a criação do subscriber indicando que o mesmo não deve receber mensagens enviadas através da mesma sessão (último parâmetro "true") o problema acontece:

             

            subscriber = session.createDurableSubscriber(topico, nomeIdentificacao, recuperarSeletor(), true);

             

            Se, ao invés disso, eu indico que o subscriber pode receber mensagens enviadas a partir da mesma sessão, o problema não acontece:

             

            subscriber = session.createDurableSubscriber(topico, nomeIdentificacao, recuperarSeletor(), false);

             

            Simplesmente mudando este parâmetro o comportamento muda. Quando o parâmetro é "true", todas as mensagens que estão armazenadas no tópico para este subscriber durável são entregues no momento que eu crio o subscriber, mas se coloco o parâmetro como "false" as mensagens são entregues adequadamente, depois que chamo "start()" na conexão.

             

            No meu caso, como este cliente desktop apenas recebe mensagens, não há o risco de consumir as próprias mensagens, e não é um problema manter o parâmetro como "false".

             

            Se você quiser/puder, faça este teste.

             

            Como dito no primeiro post, este problema só aconteceu no JBoss AS 6.1, no EAP eu não tive problemas.

             

             

            Abraço!