ActiveMQ中如何设置消息的过期时间?

ActiveMQ 中可以通过以下方式设置消息的过期时间:

  1. 在发送消息时直接设置 JMSExpiration 属性:
TextMessage message = session.createTextMessage("Hello");
message.setJMSExpiration(3600000);  // 1小时过期
producer.send(message);
  1. 在消息生产者上设置默认过期时间:
MessageProducer producer = session.createProducer(queue);
producer.setTimeToLive(3600000);  // 1小时过期
producer.send(message);  
  1. 基于发送目的地设置默认过期时间:在 Broker 配置文件中设定。
<destinationPolicy>
  <policyMap> 
    <policyEntries>
      <policyEntry topic="Expire.>">
        <defaultEntry>
          <expiryOverride>3600000</expiryOverride>  <!-- 1小时过期 -->
        </defaultEntry>
      </policyEntry>
    </policyEntries>
  </policyMap>
</destinationPolicy>
  1. 基于消息发送者设置默认过期时间:也是在 Broker 配置文件中设定。
<destinationPolicy>
  <policyMap> 
    <policyEntries>
      <policyEntry topic=">">
        <producerEntry>
          <producerId>PRODUCER1</producerId>
          <defaultEntry>
            <expiryOverride>3600000</expiryOverride>  <!-- PRODUCER1 发送的消息1小时过期 -->
          </defaultEntry>
        </producerEntry>
      </policyEntry>
    </policyEntries>
  </policyMap> 
</destinationPolicy>