Проблема
Решение
Есть прокси-сервис на WSO2 ESB 4.9.0, слушающий некоторую очередь на ActiviMQ 5.13.1. В некоторых ветках своей логики прокси-сервис помещает полученное из очереди сообщение обратно очередь, устанавливая при этом AMQ_SCHEDULED_DELAY для обеспечения задержки перед повторной обработкой сообщения. Проблема заключается в том, что ActiveMQ принимает во внимание установленный AMQ_SCHEDULED_DELAY только при первом цикле такого повторного размещения. В последующих циклах AMQ_SCHEDULED_DELAY игнорируется, и сообщение поступает в обработку моментально.
Решение
Можно лишь предполагать, чем вызвано такое поведение (или лезть в исходники ActiveMQ, чего делать не очень хочется). Вероятно, т.к. сообщение повторно размещается с тем же Message ID, ActiveMQ как-то запоминает, что таймер AMQ_SCHEDULED_DELAY для этого Message ID уже устанавливался, и не устанавливает его повторно. В качестве workaround'а подходит очистка транспортных заголовков перед повторным размещением сообщения в очередь:
<property action="remove" name="TRANSPORT_HEADERS" scope="axis2"/>
Комментариев нет:
Отправить комментарий