ActiveMQ中如何实现消息的持久化和非持久化?

ActiveMQ 中可以通过以下方式实现消息的持久化和非持久化:

  1. 持久化消息:
ConnectionFactory cf = new ActiveMQConnectionFactory("tcp://broker:61616");  
Connection connection = cf.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

Queue queue = session.createQueue("queue1");
MessageProducer producer = session.createProducer(queue);
producer.setDeliveryMode(DeliveryMode.PERSISTENT);  // 持久化

TextMessage msg = session.createTextMessage("Hello");
producer.send(msg);  // 发送持久化消息

设置生产者的 deliveryMode 为 PERSISTENT 即可将消息发送为持久化消息。持久化消息会存储于 ActiveMQ 的数据目录,不会丢失。

  1. 非持久化消息:
ConnectionFactory cf = new ActiveMQConnectionFactory("tcp://broker:61616");  
Connection connection = cf.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

Queue queue = session.createQueue("queue1");
MessageProducer producer = session.createProducer(queue);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);  // 非持久化  

TextMessage msg = session.createTextMessage("Hello");
producer.send(msg);  // 发送非持久化消息

设置生产者的 deliveryMode 为 NON_PERSISTENT 即可将消息发送为非持久化消息。非持久化消息存储于 ActiveMQ 的内存中,当Broker重启时会丢失。
非持久化消息的发送和消费性能会高于持久化消息,但不具备持久化消息的可靠性。需要根据实际业务需求选择持久化或非持久化消息。