Я использую Spring DefaultMessageListenerContainer
, чтобы получить некоторые динамические преимущества в установке значения MessageSelector, поскольку я использую Glassfish OpenMQ, который не настолько продвинут в этом отношении.Давайте иметь сообщение JMS.Слушатель выдает конкретную ошибку, которая означает: повторите попытку через x
секунды.Он повторяет попытку с ошибкой: повторите попытку через x*y
секунды, и так время увеличивается в геометрической прогрессии.Если вы не можете обработать его после z
повторных попыток, считайте его ядовитым JMS-сообщением.
DefaultMessageListenerContainer dmlc;
dmlc.stop();
dmlc.setMessageSelector(String.format("retries < %d AND retryTime <= %d", z, System.currentTimeMillis()));
dmlc.start();
Я не очень доволен этим решением, особенно когда Spring Docs выдает здесь предупреждение :-).Однако на данный момент все соответствует нашим потребностям.
Теперь у меня есть несколько потребителей сообщений EJB в различных приложениях.Некоторые из них нуждаются в таких динамических изменениях messageSelector.К сожалению, и, насколько мне известно, EJB MDB не поддерживают такие динамические «функции».Например, см. Это .
Это правильно?Есть ли обходной путь для решения EJB?Буду признателен за любую помощь.