#websphere #ibm-mq #message #mq
#websphere #ibm-mq #Сообщение #mq
Вопрос:
Я решил задать вопрос здесь, если у кого-нибудь есть идеи. Мой администратор MQ создал для меня новую очередь и псевдоним queue для записи сообщений. У меня есть одно приложение, записывающее в очередь, а другое приложение, прослушивающее очередь псевдонимов. Я использую spring JmsTemplate для записи в свою очередь. Мы наблюдаем поведение, при котором сообщение записывается в очередь, но затем мгновенно отбрасывается. Мы отключили получение и, чтобы проверить, был ли каким-либо образом установлен параметр истечения срока действия, я использовал шаблон jms для установки параметра истечения срока действия (TimeToLive). Я установил срок действия на 10 минут, но мое сообщение все равно исчезает мгновенно. Фрагмент моего кода и настройки приведены ниже.
public void publish(ModifyRequestType response) {
jmsTemplate.setExplicitQosEnabled(true);
jmsTemplate.setTimeToLive(600000);
jmsTemplate.send(CM_QUEUE_NAME, new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
String responseXML = null;
try {
responseXML myJAXBContext.getInstance().toXML(response);
log.info(responseXML);
TextMessage message = session.createTextMessage(responseXML);
return message;
} catch (myException e) {
e.printStackTrace();
log.info(responseXML);
return null;
}
}
});
}
/////////////////Мои настройки
QUEUE.PUB_SUB_DOMAIN=false
QUEUE.SUBSCRIPTION_DURABLE=false
QUEUE.CLONE_SUPPORT=0
QUEUE.SHARE_CONV_ALLOWED=1
QUEUE.MQ_PROVIDER_VERSION=6
Ответ №1:
Я нашел свою проблему. У меня был родительский метод, который имел аннотацию @Transactional. Я не хочу, чтобы мое новое сообщение jms было частью этой транзакции, поэтому я собираюсь добавить JmsTemplate.setSessionTransacted(false); перед выполнением JmsTemplate.send. Я создал отдельный jmsTempalte для отправки моего нового сообщения вместо повторного использования существующего, которым необходимо управлять.