1
resposta

Limitar tentativas de reenvio de mensagem JMS

Como faço para limitar a 3 vezes o numero de tentativas de reenvio de mensagens que foram para o DLQ por exception?

1 resposta

Olá Marcos, tudo bem?

Para limitar o número de tentativas de reenvio de mensagens que foram para o DLQ (Dead Letter Queue) por exceção, você pode utilizar o recurso de redelivery delay do JMS (Java Message Service).

O redelivery delay permite que você defina um tempo de espera antes de uma mensagem ser redelivery (reenviada) após uma falha no processamento. Dessa forma, você pode configurar o número máximo de tentativas de reenvio e o intervalo entre elas.

Aqui está um exemplo de como você pode configurar o redelivery delay em um cliente JMS usando a API do Java EE:

import javax.jms.ConnectionFactory;
import javax.jms.JMSContext;
import javax.jms.Queue;
import javax.jms.QueueConnectionFactory;
import javax.jms.Session;

// ...

ConnectionFactory connectionFactory = // obter a ConnectionFactory
Queue queue = // obter a Queue

try (JMSContext context = connectionFactory.createContext(Session.SESSION_TRANSACTED)) {
    context.setClientID("seu-cliente-id"); // opcional, caso queira identificar o cliente
    
    // Configurar o número máximo de tentativas de reenvio
    context.getRedeliveryPolicy().setMaxRedeliveries(3);
    
    // Configurar o intervalo entre as tentativas de reenvio
    context.getRedeliveryPolicy().setInitialRedeliveryDelay(5000); // 5 segundos
    
    // Enviar e processar as mensagens
    // ...
    
    context.commit();
}

Neste exemplo, estamos configurando o número máximo de tentativas de reenvio para 3 e o intervalo entre as tentativas para 5 segundos. Você pode ajustar esses valores de acordo com suas necessidades.

Lembre-se de substituir seu-cliente-id pela identificação do seu cliente, caso deseje utilizar essa opção.

Espero ter ajudado e bons estudos!