【问题标题】:How to check message sending to a JMS queue was unsuccessful?如何检查发送到 JMS 队列的消息不成功?
【发布时间】:2012-05-21 10:55:50
【问题描述】:

如果 JMS 消息尚未发送到队列,我必须记录错误消息。

如何查看消息是否未发送?

代码:

...
...   
QueueSender send = session.createSender(queue);
TextMessage tm = session.createTextMessage(message);

send.send(tm);
log.debug("Sent text=" + tm.getText());
...
...

提前致谢

【问题讨论】:

    标签: java jakarta-ee queue jms publish


    【解决方案1】:

    使用 DeliveryMode.PERSISTENT 确保它将被持久化和交付,并捕获如果 send() 失败时引发的 JMSException?

    【讨论】:

    • 喜欢这个?尝试 { ... QueueSender 发送 = session.createSender(queue); send.setDeliveryMode(DeliveryMode.PERSISTENT); TextMessage tm = session.createTextMessage(message);发送.发送(tm); log.debug("发送文本=" + tm.getText()); . . .} catch (JMSException e) { //打印“消息未发送”}
    • 是的,类似的。我使用 JMS 已经有一段时间了,但据我所知,如果出现任何问题,大多数方法都会引发 JMSExceptions。
    【解决方案2】:

    从发送调用中捕获异常就足够了。无需将传递模式设置为 PERSISTENT,因为即使您希望消息为非持久性,此选项也会使所有消息保持持久性。

    try
    {
      qsender.Send(msg);
    }
    catch(JMSException je)
    {
    }
    

    【讨论】:

      【解决方案3】:

      Oracle documentation 说:

      为了获得更大的灵活性,Message Queue 允许您自定义 JMS 客户端确认模式。在客户端确认模式下,客户端通过调用消息对象的acknowledge() 方法显式确认消息消费。

      【讨论】:

        猜你喜欢
        • 2016-05-02
        • 2016-12-10
        • 2011-01-11
        • 1970-01-01
        • 2016-09-21
        • 1970-01-01
        • 1970-01-01
        • 2015-08-25
        • 1970-01-01
        相关资源
        最近更新 更多