Если для сообщения установлен заголовок STOMP «expires», срок действия сообщения истекает сразу, не дожидаясь истечения срока действия, установленного в заголовке

#spring-boot #stomp #activemq-artemis

#весенняя загрузка #stomp #activemq-артемида

Вопрос:

 StompHeaders headers = new StompHeaders();
headers.set("persistent", "false");
headers.set("expires", "30000");
headers.set("priority", 9);
  

Приведенная выше конфигурация заключается в том, чтобы срок действия сообщения не истекал в течение 30 секунд. Но срок действия сообщения истекает сразу после достижения очереди. Прослушиватель даже не получает сообщение.

Ответ №1:

expires Заголовок указывает абсолютное время истечения срока действия сообщения (например, как JMSExpiration заголовок в сообщениях JMS), а не задержку, после которой срок действия сообщения истекает. Попробуйте это вместо:

 StompHeaders headers = new StompHeaders();
headers.set("persistent", "false");
headers.set("expires", System.currentTimeMillis()   30000);
headers.set("priority", 9);
  

Когда вы устанавливаете expires значение 30000 , это сообщает брокеру, что срок действия сообщения истек в далеком прошлом, поэтому он не доставит сообщение клиенту.

Кстати, я удалил durable заголовок, потому что он ничего не делает в ActiveMQ Artemis.