ActiveMQ 中可以通过以下方式设置消息的持久化:
1、 在发送消息时设置 JMSDeliveryMode 属性:
TextMessage message = session.createTextMessage("Hello");
message.setJMSDeliveryMode(DeliveryMode.PERSISTENT); // 持久化消息
producer.send(message);
JMSDeliveryMode 有两个值:
- PERSISTENT:持久化消息,会被持久化到存储介质。
- NON_PERSISTENT:非持久化消息,存储在内存中,服务重启会丢失。
2、 在消息生产者上设置默认 deliveryMode:
MessageProducer producer = session.createProducer(queue);
producer.setDeliveryMode(DeliveryMode.PERSISTENT); // 默认发送持久化消息
producer.send(message);
3、 基于发送目的地设置默认 deliveryMode:在 Broker 配置文件中设定。
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry topic="Persist.>">
<defaultEntry>
<persistent>true</persistent> <!-- Persist.> 目的地的消息默认持久化 -->
</defaultEntry>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
- 基于消息发送者设置默认 deliveryMode:也是在 Broker 配置文件中设定。
<destinationPolicy>
<policyMap>
<policyEntry topic=">">
<producerEntry>
<producerId>PRODUCER1</producerId>
<defaultEntry>
<persistent>true</persistent> <!-- PRODUCER1 发送的消息默认持久化 -->
</defaultEntry>
</producerEntry>
</policyEntry>
</policyMap>
</destinationPolicy>