假设我向非耐用订户发送了一条消息,但是订户未能确认该消息。服务器会尝试重新传递消息还是仅持久订阅者才能进行重新交付?结果是否取决于消息是持久的还是非持久的?
在Mark Richards的《 Java消息服务》一书中,我没有找到明确的答案,但有两个看似矛盾的说法:
cknowledge()方法通知JMS提供者该消息已被消费者成功接收。如果在确认过程中发生提供者故障,则此方法会向客户端抛出异常。提供程序失败导致消息被JMS服务器保留以重新发送。
这表明邮件已重新发送。
如果提供商在将消息传递给具有非持久订阅的使用者时失败,则消息可能会丢失。如果持久订阅者收到消息,并且在将确认返回给提供者之前发生了故障,那么JMS提供者将认为该消息未传递,并将尝试重新传递它。
好的,所以消息 可能会丢失,即未重新发送,但这取决于什么情况?
持久性订户和非持久性消息的组合甚至还有用例吗?