Apache activemq artemis v.2.28.0:如何按需设置消息是否有过期时间?

问题描述 投票:0回答:0

我正在学习如何使用 Artemis 消息传递代理。在我的示例应用程序中,我正在应用生产者-消费者方案。我希望发送到队列的某些消息具有过期时间。我的示例应用程序是在 Spring Boot 中开发的。我使用以下方法发送消息:

public void send(JmsTemplate jmsTemplate, String queueName, String textMessage, long timeToLive) throws JMSException {
    jmsTemplate.setTimeToLive(timeToLive);
    jmsTemplate.convertAndSend(queueName, textMessage, new MessagePostProcessor() {
        public Message postProcessMessage(Message message) throws JMSException {
            message.setJMSExpiration(timeToLive);
            return message;
        }
    });
}

我在broker.xml文件中定义了如下配置:

<address-setting match="#">
    <dead-letter-address>DLQ</dead-letter-address>
    <expiry-address>ExpiryQueue</expiry-address>
    <redelivery-delay>0</redelivery-delay>
    <!-- with -1 only the global-max-size is in use for limiting -->
    <max-size-bytes>-1</max-size-bytes>
    <message-counter-history-day-limit>10</message-counter-history-day-limit>
    <address-full-policy>PAGE</address-full-policy>
    <auto-create-queues>true</auto-create-queues>
    <auto-create-addresses>true</auto-create-addresses>
    <auto-create-jms-queues>true</auto-create-jms-queues>
    <auto-create-jms-topics>true</auto-create-jms-topics>
</address-setting>

使用此配置,即使我在 timeTolive 字段中设置的值不是 0,我也已通过管理控制台检查消息的 Expiry 字段设置为 0。我把broker.xml文件的配置修改成了这个:

<address-setting match="#">
    <dead-letter-address>DLQ</dead-letter-address>
    <expiry-address>ExpiryQueue</expiry-address>
    <expiry-delay>1000</expiry-delay>
    <redelivery-delay>0</redelivery-delay>
    <!-- with -1 only the global-max-size is in use for limiting -->
    <max-size-bytes>-1</max-size-bytes>
    <message-counter-history-day-limit>10</message-counter-history-day-limit>
    <address-full-policy>PAGE</address-full-policy>
    <auto-create-queues>true</auto-create-queues>
    <auto-create-addresses>true</auto-create-addresses>
    <auto-create-jms-queues>true</auto-create-jms-queues>
    <auto-create-jms-topics>true</auto-create-jms-topics>
    </address-setting>
</address-settings>

对于这种配置,情况正好相反。如果我将 timeToLive 字段设置为 0,则 Expiry 字段不会显示值 0,而是显示消息过期时间的时间戳。我不明白为什么。

你能给我一些解决这个问题的方向吗?是否可以按需设置消息是否具有关联的过期时间?

干杯

producer-consumer activemq-artemis
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.