Как читать сообщение из WebSphere MQ без удаления исходного сообщения из очереди ..?spring jmstemplate прочитанное сообщение без удаления (WebSphere MQ)
У меня есть приложение весны, которое читает сообщение из WebSphere MQ. После прочтения у меня есть метод процесса, который обрабатывает данные, полученные из очереди.
Шаг 1
response = jmsTemplate.receive();
//Message automatically removed from queue.
Шаг 2
process(response);
Есть вероятность генерации исключений в методе процесса. В случае исключений мне нужно сохранить сообщение в очереди. Возможно ли это? Это их способ удалить сообщение только при подтверждении пользователя? Я попытался добавить
jmsTemplate.setSessionAcknowledgeMode(javax.jms.Session.CLIENT_ACKNOWLEDGE);
но все же сообщение удаляется.
Пожалуйста, помогите!
JmsTemplate Создание фрагмента кода
JndiConnectionFactorySupport connectionFactoryBean = new JndiConnectionFactorySupport();
connectionFactoryBean.setBindingsDir(this.bindingDir);
connectionFactoryBean
.setConnectionFactoryName(connectionFactoryName);
connectionFactoryBean.afterPropertiesSet();
jmsTemplate.setConnectionFactory(connectionFactoryBean.getObject());
JndiDestinationResolver destinationResolver = new JndiDestinationResolver();
destinationResolver.setJndiTemplate(connectionFactoryBean
.getJndiTemplate());
jmsTemplate.setDestinationResolver(destinationResolver);
jmsTemplate.setReceiveTimeout(20000);
jmsTemplate.setDefaultDestinationName(this.defaultDestinationName);
Попробовал метод jmsTemplate.execute(), как показано ниже
@SuppressWarnings({ "unused", "unchecked" })
Message responseMessage = (Message) jmsTemplate.execute(
new SessionCallback() {
public Object doInJms(Session session)
throws JMSException {
MessageConsumer consumer = session
.createConsumer(jmsTemplate.getDestinationResolver().resolveDestinationName(session, "QUEUE_NAME", false));
Message response = consumer.receive(1);
try {
testMethod();//this method will throw exception.
response.acknowledge();
consumer.close();
} catch(Exception e){
consumer.close();//control will come here.
}
return response;
}
}, true);
я не использую конфигурации XML JMS. Вместо этого объект JmsTemplate создается с помощью java. (Добавлен фрагмент кода) – user1940878