Bom dia
No meu sistema estou estou mantendo uma conexão aberta em um singleton para consumir as mensagens. Porém ele não recebe redelivery, se uma mensagem não é entregue ele pula pra próxima e a anterior continua aparecendo como não consumida.
Tem alguma maneira de receber redelivery na mesma conexão?
Segue o codigo
@Startup
@Singleton
public class MensageriaInit {
Connection connection;
Session session;
MessageConsumer consumer;
@PostConstruct
public void inicializaActiveMQ() {
InitialContext context;
ConsumerMessageListener c = new ConsumerMessageListener();
c.injetarEM(em);
try {
context = new InitialContext();
ConnectionFactory factory = (ConnectionFactory) context.lookup("ConnectionFactory");
connection = factory.createConnection();
connection.start();
Destination fila = (Destination) context.lookup("teste");
session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
consumer = session.createConsumer(fila);
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
TextMessage textMessage = (TextMessage) message;
try {
System.out.println(textMessage.getText() + " +++++++++++++++++++++++++++++++++++++++++++++++");
} catch (JMSException ex) {
Logger.getLogger(MensageriaInit.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
} catch (NamingException ex) {
Logger.getLogger(MensageriaInit.class.getName()).log(Level.SEVERE, null, ex);
throw new EJBException(ex);
} catch (JMSException ex) {
Logger.getLogger(MensageriaInit.class.getName()).log(Level.SEVERE, null, ex);
throw new EJBException(ex);
}
}
@PreDestroy
public void preDestroy() {
try {
consumer.close();
session.close();
connection.close();
} catch (JMSException ex) {
Logger.getLogger(MensageriaInit.class.getName()).log(Level.SEVERE, null, ex);
}
}
}