【问题标题】:ActiveMQ/JMS - do not retry if message failed to be sentActiveMQ/JMS - 如果消息发送失败不要重试
【发布时间】:2014-02-08 21:45:45
【问题描述】:

我将 JMS 与 ActiveMQ 一起使用。我在一台服务器上运行 ActiveMQ 代理,它创建一个队列和一个消息使用者,用于从其他服务器接收消息。如果另一台服务器尝试向队列发送消息并且由于某种原因失败(例如服务器之间的网络出现故障),那么我不希望该服务器重试发送消息。只需发送一次,如果失败,请不要重试。这对 ActiveMQ/JMS 可行吗? javax.jms.Session 类有 3 种确认模式(AUTO_ACKNOWLEDGE、CLIENT_ACKNOWLEDGE、DUPS_OK_ACKNOWLEDGE),所有这些都表明 JMS 消息生产者将在失败时重试。

【问题讨论】:

    标签: java jms activemq


    【解决方案1】:

    如果您的客户端未使用故障转移传输,则尝试发送时连接失败意味着客户端不会尝试重新连接,因此在连接备份后不会尝试重新发送消息。

    如果您使用故障转移传输并且客户端在发送传输时遇到网络故障,则该传输将尝试重新连接,并且客户端将阻止发送,直到重新建立连接并且消息将再次发送到代理。

    【讨论】:

    • 另外,会话确认方式与消息的产生无关。会话事务模式确实会影响生产:如果进行事务处理,生成的消息会一直保留到 commit()。
    猜你喜欢
    • 2020-12-09
    • 2016-07-09
    • 1970-01-01
    • 2018-10-21
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多