【问题标题】:JMS Persistent delivery modeJMS 持久交付模式
【发布时间】:2013-12-17 02:23:14
【问题描述】:

我正在学习 JMS,偶然发现了这个说法:http://docs.oracle.com/javaee/1.3/jms/tutorial/1_3_1-fcs/doc/advanced.html#1023387

PERSISTENT 交付模式,默认,指示 JMS 提供者 要格外小心以确保消息在传输过程中不会丢失 JMS 提供程序失败的情况。使用此传递模式发送的消息 发送时会记录到稳定的存储中。

如果JMS Provider出现故障,那么JMS Provider如何保证消息不丢失?

这是什么意思:

“使用此传递模式发送的消息在发送时会记录到稳定存储中。”

请帮助我理解这里的 JMS 概念。

【问题讨论】:

    标签: jms persistent


    【解决方案1】:

    这意味着当消息传递提供者因任何原因关闭并再次出现时,具有持久传递模式的消息不会丢失。消息传递提供程序以 PERSISTENT 传递模式将消息保存到磁盘,当消息提供重新启动时,将从磁盘读取消息并将其放入内存。

    希望这很清楚。

    【讨论】:

    • 所以我对持久模式的理解是 --> 我向 ApacheMQ 发送消息。在由于某种原因将其发送到任何 messgeProcessor 之前,ApacheMQ 出现故障。我重新启动服务器,然后之前发送的消息在队列中仍然可用。我说的对吗?
    • 我假设您的意思是作为消费者的消息处理器,是的,您的理解是正确的
    【解决方案2】:

    你可以做一个简单的测试来理解这个概念。如何创建生产者和消费者,请参考教程here

    你会看到producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); 改成producer.setDeliveryMode(DeliveryMode.PERSISTENT);

    现在创建两个类。一个只调用生产者,一个只调用消费者。

    public class AppOnlyProduce { public static void thread(Runnable runnable, boolean daemon) { Thread brokerThread = new Thread(runnable); brokerThread.setDaemon(daemon); brokerThread.start(); } public static void main(String[] args) throws InterruptedException { thread(new HelloWorldProducer(), false); thread(new HelloWorldProducer(), false); } }

    public class AppOnlyConsumer { public static void thread(Runnable runnable, boolean daemon) { Thread brokerThread = new Thread(runnable); brokerThread.setDaemon(daemon); brokerThread.start(); } public static void main(String[] args) throws InterruptedException { thread(new HelloWorldConsumer(), false); thread(new HelloWorldConsumer(), false); } } 首先运行 AppOnlyProduce。它将创建两条消息。现在运行 AppOnlyConsumer 它将读取两条消息。 现在将行改回producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

    再次运行 AppOnlyProduce。它将创建两条消息。现在运行 AppOnlyConsumer 你会看到它等待了一段时间的消息,他们说Received: null

    在第一种情况下,模式是持久的。因此,尽管 Java 程序结束的消息在 JMS 启动时被持久化并可用(这次是由消费者)

    在第二种情况下,模式不是持久的。因此,程序一结束,消息就消失了。

    【讨论】:

      猜你喜欢
      • 2017-07-29
      • 2017-01-15
      • 1970-01-01
      • 1970-01-01
      • 2013-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-16
      相关资源
      最近更新 更多