Сообщения WebSphere MQ исчезают из очереди

#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 для отправки моего нового сообщения вместо повторного использования существующего, которым необходимо управлять.