2016-12-29 3 views
1

У нас есть приложение, развернутое на prod в среде с несколькими кластерами с балансировщиком нагрузки.Рекомендации о публикации JMS для публики

В приложении мы сохраняем кеш для повышения производительности.

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

В настоящее время у нас есть только два узла, но мы могли бы добавить больше в будущем. Поэтому моя первая мысль заключалась в том, чтобы реализовать очередь JMS с публикацией/подпиской модели. Как только узел должен очистить свой кеш, он отправит сообщение в очередь, и все узлы (даже сам) должны быть автоматически уведомлены об очистке своих кешей. Я проверил с activemq, но, насколько я понял, после того, как издатель отправляет сообщение, подписчику необходимо получить getMessage() для получения сообщения. Это подразумевает, что мы должны постоянно останавливать очередь, чтобы увидеть, есть ли там какое-либо сообщение, а также я должен был бы убедиться, что после того, как все подписчики прочитают сообщение, сообщение будет удалено.

Я пишу только для того, чтобы получить советы о том, как реализовать такую ​​вещь, если activemq или любая другая реализация jms обеспечивает то, что соответствует нашим потребностям.

Спасибо

ответ

1

Этот сценарий довольно прост со всеми поставщиками JMS, включая ActiveMQ.

Просто опубликуйте сообщение на тему, скажем CLEAR.CACHE. Затем каждый узел соединяется с идентификатором клиента, уникальным для этого узла (тот же ID даже после перезагрузки, поэтому вам нужно получить этот идентификатор из среды/конфигурации, а не кода).

Каждый узел затем может создать надежного абонента в теме CLEAR.CACHE. Копия будет доставлена ​​каждому узлу, даже если узел не работает во время публикации.

Некоторые официальные документы: https://docs.oracle.com/cd/E19798-01/821-1841/bncgd/index.html

Просто хотел сказать, что существуют комплексные решения распределенного кэша для использования, а также, где вам не придется вручную справиться с этим материалом. Redis, hazlecast и т. Д. Но если все, что вам нужно, это базовая команда «очистить кеш» между узлами (или любой другой тип команды для распространения среди узлов), тогда JMS - это путь.

+0

Отлично, спасибо! – fgonzalez

Смежные вопросы