JMS持久交付模式
我正在学习JMS,遇到了以下声明: 默认情况下,持久传递模式指示JMS提供程序 要格外小心,以确保邮件在传输过程中不会丢失 JMS提供程序失败的情况。使用此传递模式发送的邮件 发送时记录到稳定存储器 如果JMS提供程序发生故障,那么JMS提供程序如何确保消息不会丢失 这意味着什么: “使用此传递模式发送的邮件在发送时会记录到稳定存储器中。”JMS持久交付模式,jms,persistent,Jms,Persistent,我正在学习JMS,遇到了以下声明: 默认情况下,持久传递模式指示JMS提供程序 要格外小心,以确保邮件在传输过程中不会丢失 JMS提供程序失败的情况。使用此传递模式发送的邮件 发送时记录到稳定存储器 如果JMS提供程序发生故障,那么JMS提供程序如何确保消息不会丢失 这意味着什么: “使用此传递模式发送的邮件在发送时会记录到稳定存储器中。” 请帮助我理解这里的JMS概念。这意味着当消息传递提供程序因任何原因停机并再次出现时,具有持久传递模式的消息不会丢失。消息传递提供程序使用持久传递模式将消息保
请帮助我理解这里的JMS概念。这意味着当消息传递提供程序因任何原因停机并再次出现时,具有持久传递模式的消息不会丢失。消息传递提供程序使用持久传递模式将消息保存到磁盘,当消息提供重新启动时,将从磁盘读取消息并将其带到内存中
希望这一点是明确的。这意味着,当消息提供程序因任何原因停机并再次出现时,具有持久传递模式的消息不会丢失。消息传递提供程序使用持久传递模式将消息保存到磁盘,当消息提供重新启动时,将从磁盘读取消息并将其带到内存中
希望这是清楚的。你可以做一个简单的测试来理解这个概念。请参阅有关如何创建生产者和消费者的教程 您将看到
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT)代码>
将其更改为producer.setDeliveryMode(DeliveryMode.PERSISTENT)代码>
现在创建两个类。只呼叫生产者和消费者的人
public class AppOnlyProduce{
公共静态无效线程(可运行、可运行、布尔守护进程){
Thread brokerThread=新线程(可运行);
brokerThread.setDaemon(守护进程);
brokerThread.start();
}
公共静态void main(字符串[]args)引发InterruptedException{
线程(新HelloWorldProducer(),false);
线程(新HelloWorldProducer(),false);
}
}
公共类AppOnlyConsumer{
公共静态无效线程(可运行、可运行、布尔守护进程){
Thread brokerThread=新线程(可运行);
brokerThread.setDaemon(守护进程);
brokerThread.start();
}
公共静态void main(字符串[]args)引发InterruptedException{
线程(新HelloWorldConsumer(),false);
线程(新HelloWorldConsumer(),false);
}
}
首轮约生产。它将创建两条消息。现在运行AppOnlyConsumer,它将读取两条消息。
现在将行更改回producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT)代码>
再次运行AppOnlyProduce。它将创建两条消息。现在运行AppOnlyConsumer,您将看到它等待消息,他们说Received:null
在第一种情况下,模式是持久的。所以,尽管Java程序结束消息在JMS启动时被持久化并可用(这一次是由使用者提供的)
在第二种情况下,模式不是持久的。所以程序一结束消息就消失了 你可以做一个简单的测试来理解这个概念。请参阅有关如何创建生产者和消费者的教程
您将看到producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT)代码>
将其更改为producer.setDeliveryMode(DeliveryMode.PERSISTENT)代码>
现在创建两个类。只呼叫生产者和消费者的人
public class AppOnlyProduce{
公共静态无效线程(可运行、可运行、布尔守护进程){
Thread brokerThread=新线程(可运行);
brokerThread.setDaemon(守护进程);
brokerThread.start();
}
公共静态void main(字符串[]args)引发InterruptedException{
线程(新HelloWorldProducer(),false);
线程(新HelloWorldProducer(),false);
}
}
公共类AppOnlyConsumer{
公共静态无效线程(可运行、可运行、布尔守护进程){
Thread brokerThread=新线程(可运行);
brokerThread.setDaemon(守护进程);
brokerThread.start();
}
公共静态void main(字符串[]args)引发InterruptedException{
线程(新HelloWorldConsumer(),false);
线程(新HelloWorldConsumer(),false);
}
}
首轮约生产。它将创建两条消息。现在运行AppOnlyConsumer,它将读取两条消息。
现在将行更改回producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT)代码>
再次运行AppOnlyProduce。它将创建两条消息。现在运行AppOnlyConsumer,您将看到它等待消息,他们说Received:null
在第一种情况下,模式是持久的。所以,尽管Java程序结束消息在JMS启动时被持久化并可用(这一次是由使用者提供的)
在第二种情况下,模式不是持久的。所以程序一结束消息就消失了 因此,我对持久模式的理解是-->我向ApacheQ发送一条消息。在它因为某种原因被发送到任何消息处理器之前,ApacheQ会停止运行。我重新启动服务器,然后先前发送的消息仍在队列中可用。我说的对吗?我想你是指作为消费者的消息处理器,是的,你的理解是正确的,所以我对持久模式的理解是-->我向ApacheQ发送消息。在它因为某种原因被发送到任何消息处理器之前,ApacheQ会停止运行。我重新启动服务器,然后先前发送的消息仍在队列中可用。我说的对吗?我想你指的是作为消费者的信息处理者,是的,你的理解是正确的