在项目中尝试过两种解决方式:
- 修改activemq/config/activemq.xml配置文件
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry topic=">" producerFlowControl="true">
<pendingMessageLimitStrategy>
<constantPendingMessageLimitStrategy limit="1000"/>
</pendingMessageLimitStrategy>
</policyEntry>
<policyEntry queue=">" producerFlowControl="true" memoryLimit="1mb">
<!--打开这段注释即可实现目的
<deadLetterStrategy>
<sharedDeadLetterStrategy processExpired="false" />
</deadLetterStrategy>
-->
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
- 修改生产者代码
this.jmsTemplate.setTimeToLive(timeToLive);
//为true的时候才会使用TTL配置
this.jmsTemplate.setExplicitQosEnabled(true);
this.jmsTemplate.convertAndSend(queue, obj);
//这段代码配置超时消息不缓存到DLQ
this.jmsTemplate.setDeliveryMode(DeliveryMode.NON_PERSISTENT);