Задержка сообщений в ActiveMQ - PullRequest
0 голосов
/ 29 октября 2019

Я хотел бы задержать сообщение для моего клиента JMS. Я использую AMQ 5.8.0. В документации говорится, что для настройки конфигурации необходимо установить schedulerSupport на true (по умолчанию false)

<broker xmlns="http://activemq.apache.org/schema/core"
        persistent="false"
        dedicatedTaskRunner="false"
        schedulerSupport="true"
        brokerName="mybroker">

Вот мой тестовый код для создания / потребления моей записи

TextMessage sendMessage = producerSession.createTextMessage();
sendMessage.setStringProperty(Constants.PARAM_ID, newUniqueId);
long delay = 20 * 1000;
sendMessage.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, delay); //sets delay
sendMessage.setJMSCorrelationID(newUniqueId);
producer.send(sendMessage);

Message m = consumer.receive(); //get message. This should be null
if(m != null)
{
    id = m.getStringProperty(Constants.PARAM_ID); //I get the message well before 20 sec delay
}

Я вижу свою запись в браузере Jetty на вкладке «Расписание». Сообщение должно быть отложено на 20 секунд. Однако, когда выполняется вызов consumer.receive(), я получаю запись задолго до того, как истечет 20 задержек.

Не понимаю ли я, как работает эта задержка? Я не хочу, чтобы запись была доступна в течение определенного периода времени.

1 Ответ

1 голос
/ 29 октября 2019

Вы должны использовать свойство ScheduledMessage.AMQ_SCHEDULED_DELAY, то есть

sendMessage.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, delay);

и включить постоянство (по умолчанию = true, если не установлено):

<broker persistent="true">
...