ActiveMQ Артемида задержка доставки - PullRequest
0 голосов
/ 31 мая 2019

Установка:

  • У нас есть приложение Spring Boot, которое читает сообщения из очереди ActiveMQ Artemis JMS.
  • Сообщения обрабатываются в транзакции JPA.
  • Когда есть исключение, запускающее откат в JPA, оно также запускает откат JMS в Artemis, который настроен с задержкой повторной доставки.
  • Наше приложение работает в нескольких экземплярах параллельно, и это вызывает проблемы с оптимистической блокировкой при обработке нескольких сообщений с общими данными.

Проблема: Когда X-сообщения обрабатываются параллельно и возникает проблема с оптимистической блокировкой, проходит только 1 сообщение, а все остальные перепланируются с задержкой. Когда происходит повторная доставка, то так же, как и раньше, сообщения X-1 будут поступать в одно и то же время, поскольку задержка такая же и вызывает ту же проблему только при прохождении только одного.

Вопрос: Кто-нибудь знает способ добавить дисперсию ко времени задержки повторной доставки ActiveMQ Artemis?

Примечание: я знаю, что в ActiveMQ 5.x есть опция для этого, называемая collisionAvoidanceFactor, но она отсутствует в ActiveMQ Artemis.

1 Ответ

0 голосов
/ 31 мая 2019

Как вы заметили, в ActiveMQ Artemis нет эквивалента для collisionAvoidanceFactor.Я не знаю способа изменить задержку доставки подобным образом.Существует redelivery-delay-multiplier, но он применяется последовательно во всех передачах и не обеспечит искомую дисперсию.

Вы можете рассмотреть возможность использования группировки сообщений , чтобы "сообщения, которые«Совместное использование общих данных» потребляются последовательно одним и тем же потребителем, и поэтому в первую очередь избегайте проблем с блокировкой.

Посмотрев, что потребуется для реализации этой функции, я открыл ARTEMIS-2364 ,Я скоро отправлю запрос на удаление, так что, скорее всего, он будет в следующей версии Artemis (т.е. 2.10).

...