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?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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?
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.