Держите сообщение в теме, пока все потребители не закончат обработку - PullRequest
0 голосов
/ 07 декабря 2018

Команда, у нас есть издатель, который публикует сообщение для запроса темы и предполагает, что у нас запущено 2 экземпляра.Эти 2 экземпляра получат сообщение из темы.один потребитель обработал без каких-либо проблем, но другой потребитель во время обработки потерпел крах в середине.Так как это недолговечная тема, сообщение уже удалено из темы запроса, пока потребитель получает сообщение.Теперь мы не хотим, чтобы это произошло. Если оба потребителя не закончили, сообщение должно быть доступно в теме.Мы не можем использовать надежного подписчика для этого случая, поскольку потребительские экземпляры являются динамическими.Сегодня у нас есть 2 экземпляра потребителей, а завтра в зависимости от нагрузки мы можем добавить еще 2 экземпляра потребителей, и если у нас есть постоянный подписчик, мы не можем поддерживать динамический clientId и durableSubscriptionNaem.Мы используем верблюжий маршрут для потребителя и издателя.

Любой подход или опция в activemq для решения этой проблемы?

Спасибо, команда Golden Eagle.

1 Ответ

0 голосов
/ 07 декабря 2018

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

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

...