2
respostas

O modo NON_PERSISTENT apagará todas as mensagem que não foram consumidas assim que o ActiveMQ reiniciar

No caso de estar no modo NON_PERSISTENT com um TTL configurado com um tempo alto e o servidor reiniciar, a mensagem ainda não estará lá para ser consumida?

2 respostas

Opa Luis, não. O default dele é persistent, justamente pq a especificação do JMS, para filas, informa que toda mensagem deve ter garantia de entrega.

Luis, se estiver utilizando o modo NON_PERSISTENT você perderá a mensagem se o seu MOM for reiniciado, pois nesse modo ele armazena as mensagens apenas em memória. O padrão é PERSISTENT, o que envolve internamente o processo de receber a mensagem, armazenar a mesma em disco e somente depois disso ele envia o ACK ao produtor. Não é o ACK do consumidor que estamos falando aqui e sim o ACK ao produtor de que a mensagem foi recebida pelo MOM. Por exemplo, se você está recebendo os dados de um pedido de um sistema externo e seu modo de operação é PERSISTENT, o MOM vai receber a mensagem, armazenar no banco de dados interno e confirmar o recebimento ao sistema que enviou, desta forma você não perde mais esse pedido, porém se estiver em NON_PERSISTENT, ele vai receber a mensagem, colcoar na fila e deixar apenas em memória, vai enviar o ACK ao enviador da mensagem e se você reiniciar o MOM, perde essa mensagem. Tudo depende do seu cenário de integração, se forem dados que não podem ser perdidos, use PERSISTENT caso contrário use NON_PERSISTENT. Lembrando que o que manda é reiniciar o MOM e não o restante da estrutura.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software