消息持久话
一 、 持久化
1.1 非持久 messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT)
非持久化:当服务器宕机,消息不存在
1.2 持久 messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT)
持久化:当服务器宕机,消息依然存在
默认的持久化消息是,1.2 持久,此模式保证这些消息只被传送一次和成功使用一次。对于这些消息,可靠性是优先考虑的因素
可靠性的另一个重要的方面是确保持久性消息传送至目标后,消息服务在向消费者传送它们之前不会丢失这些消息
1,1 非持久
public class JmsProduce {
public static final String ACTIVEMQ_URL = "tcp://10.5.96.48:61616";
public static final String QUEUE_NAME = "queue01";
public static void main(String[]args) throws JMSException {
//1.创建连接工厂
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
//2.通过连接工厂,获得连接connection并启动访问
Connection connection = activeMQConnectionFactory.createConnection();
connection.start();
//3.创建会话 session
//两个桉树 ,第一个叫事务 第二个叫签收
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//4 .创建目的地(具体是队列还是主题topic)
Queue queue = session.createQueue(QUEUE_NAME);
//5. 创建消息的生产者
MessageProducer messageProducer = session.createProducer(queue);
/******** 非持久 start ***********/
//消息的持久化设置(现在是非持久)
messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
/******** 非持久 end ***********/
//6.通过使用messageProducer 生产3条消息发送到队列里面
for (int i = 0; i <3 ; i++) {
// 7.创建消息
TextMessage textMessage = session.createTextMessage("Msg---" + i);
//8.消息生产者发送给mq
messageProducer.send(textMessage);
}
//9.关闭资源 顺着开启,倒着关闭
messageProducer.close();
session.close();
connection.close();
System.out.println("**** 消息发布到MQ完毕 ****");
}
}
然后停止服务器,然后在重启服务,消息没有了
1.2 持久化 演示和上面的一样只不过是将
messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT);
写入这段代码替换非持久的地方,或是默认不写 也会选择持久化作为 默认的模式。消息被保存在服务中