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

时间:2015-12-16 16:50:02

标签: java jms

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

我的问题是:如果发生超时,或者应用程序根据以下示例使用同步JMS方法处理消息崩溃,该消息会发生什么?

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您的意思是通过JMS构建请求/回复的同步发送或模拟吗?

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

  • 对于第二种情况,需要2个队列requestsreplies