ActiveMQ中如何设置消息的持久化?

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>
  1. 基于消息发送者设置默认 deliveryMode:也是在 Broker 配置文件中设定。
<destinationPolicy>
  <policyMap>  
    <policyEntry topic=">">
      <producerEntry>
        <producerId>PRODUCER1</producerId>
        <defaultEntry>
          <persistent>true</persistent>  <!-- PRODUCER1 发送的消息默认持久化 -->
        </defaultEntry>
      </producerEntry>
    </policyEntry>
  </policyMap>
</destinationPolicy>