无法从 Payara 5.2022.5 上的 DLQ 获取现有 JMS 消息

问题描述 投票:0回答:1

我正在尝试重新处理来自死信/消息队列(DLQ)的消息。 在下面的方法中,当我在 Payara 5.2022.5 上执行

null
时,我得到
dlqConsumer.receive(5000)
。 当我使用
QueueBrowser
时,消息显示得很好。 while循环不执行什么?

public void resubmitMessages(int toResubmit) throws Exception {
    log.debug("DLQService: resubmitMessages()");
    InitialContext ctx = null;
    QueueConnectionFactory connectionFactory;
    QueueConnection queueConn = null;

    try {
        ctx = new InitialContext();
        connectionFactory = (QueueConnectionFactory) ctx.lookup("jms/ConnectionFactory");
        queueConn = connectionFactory.createQueueConnection();
        QueueSession queueSession = queueConn.createQueueSession(true, QueueSession.AUTO_ACKNOWLEDGE);
        assert queueSession.getTransacted();

        Queue clsQueue = (Queue) ctx.lookup(CLS_NAME);
        QueueSender sender = queueSession.createSender(clsQueue);

        Queue dlq = (Queue) ctx.lookup("queue/mq.sys.dmq");
        MessageConsumer dlqConsumer = queueSession.createConsumer(dlq);

        int i = 0;
        Message message;
        while ((message = dlqConsumer.receive(5000)) != null && i < toResubmit) {
            try {
                log.debug("Processing: " + ((ObjectMessage) message).getObject());
                sender.send(message);
                queueSession.commit();
                log.debug("resubmitted successfully to main queue from dlq");
            } catch (JMSException jmse) {
                log.error("Exception caught while resubmitting message to main queue", jmse);
                queueSession.rollback();
                throw jmse;
            }
            i++;
        }
    } catch (Exception e) {
        log.error("Exception caught while sending message", e);
        throw e;
    } finally {
        cleanUp(ctx, queueConn);
    }
}
java jms payara
1个回答
0
投票

我错过了

queueConn.start();
来开始交易。 为什么我的方式没有返回消息,我不知道。 如果您是 JMS 专家,请对此发表评论。

© www.soinside.com 2019 - 2024. All rights reserved.