【问题标题】:WebSphere MQ Messages Disappear From QueueWebSphere MQ 消息从队列中消失
【发布时间】:2019-03-21 19:36:05
【问题描述】:

我想我会在这里提出一个问题,以防有人有想法。我的 MQ 管理员创建了一个新队列和别名队列供我写入消息。我有一个应用程序写入队列,另一个应用程序正在侦听别名队列。我正在使用 spring jmsTemplate 写入我的队列。我们看到消息被写入队列但随后立即被丢弃的行为。我们禁用了获取并查看是否以某种方式设置了过期参数,我使用 jms 模板来设置过期设置 (timeToLive)。我将到期时间设置为 10 分钟,但我的消息仍然会立即消失。我的代码和设置的 sn-p 如下。

    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

【问题讨论】:

    标签: websphere ibm-mq message mq


    【解决方案1】:

    我发现了我的问题。我有一个带有 @Transactional 注释的父方法。我不希望我的新 jms 消息成为该事务的一部分,因此我将添加 jmsTemplate.setSessionTransacted(false);在执行 jmsTemplate.send 之前。我创建了一个单独的 jmsTempalte 来发送我的新消息,而不是重复使用需要管理的现有消息。

    【讨论】: