首页 文章

如果超时或应用程序处理消息崩溃,消息会发生什么?

提问于
浏览
3

我目前正在阅读JAVA的同步JMS . 我想确认我的理解是否正确 . 基于我在Google中搜索的内容,我的理解是针对JMS同步方法,如果发生超时,则消息将永远丢失 . 我对么?

My question is: 如果发生超时,或者应用程序使用基于以下示例的同步JMS方法处理消息崩溃,该消息会发生什么?

使用synchronous作为示例,其中系统A是消息的生成者,系统B使用和处理消息
1:系统A将消息发送到队列并提交 .
2:系统A等待确认仍然可用
3:另一侧的系统B将使用receive()消耗来自队列的消息
4:系统B使用该消息并尝试保存/处理该消息 .
5:此时,系统B崩溃 . 消息回滚到队列 (Am I correct to understand this way)
6:假设系统B在2分钟内启动 . 系统A仍在等待过去2分钟的响应(假设没有超时)
7:系统B将再次使用来自同一队列的消息并提交 .
8:下一个系统A将收到系统B已成功处理该消息的确认

2 回答

  • 0

    有一种称为死信队列的东西,当消费者无法处理消息时消息就会消失 . 我知道ActiveMQ有这个功能,但我不太确定它是否是JMS规范的一部分 . 我最近一直在和HornetQ合作,它也有一个死信队列功能 .

    http://activemq.apache.org/message-redelivery-and-dlq-handling.html

  • 0

    您是指通过JMS构建的请求/回复的同步发送或仿真吗?

    • 如果是第一种情况,那么 生产环境 者只会等待提供者接受该消息 . 在该 生产环境 者不关心该消息和消费者之后 JMS 提供者负责 persistence/redeliver/dead letter/etc . 同步发送仅涉及线程等待,直到将消息复制到JMS .

    • 对于第二种情况,有 2 queues requiredrequestsreplies

相关问题