Я хотел бы задержать сообщение для моего клиента 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 задержек.
Не понимаю ли я, как работает эта задержка? Я не хочу, чтобы запись была доступна в течение определенного периода времени.