PubSub - Как добавить подписчика для каждого экземпляра ElasticBeanstalk EC2 - PullRequest
0 голосов
/ 04 марта 2019

У меня есть простая коллекция пар ключ-значение в моей базе данных mongo, в ней хранятся сведения о конфигурации моего веб-приложения, и она читается каждым экземпляром EC2, запускаемым автоматическим масштабированием ElasticBeanstalk (1-10 экземпляров).

Почти каждая конечная точка службы JAXRS вызывает чтение из коллекции конфигурации mongo, и я хочу прекратить чтение значений непосредственно из БД, чтобы уменьшить нагрузку на базу данных.

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

Проблема в том, что только один экземпляр EC2 очистит свой кэштак что мне нужно использовать какой-то тип pub / sub, чтобы сообщить всем остальным экземплярам EC2.

Нужна ли мне тема SNS или есть очередь SQS с каналом pub-sub (как здесь , но я не могу найти примеров)?

В любом случае может показаться, что я могу подписаться только на прослушиватель HTTP или HTTP или опросить цикл с тайм-аутом.

Я хочу, чтобы это также работало на моей машине разработчика (нет общедоступного IP), и я не уверен, что Java вернет моим экземплярам EC2 частный или публичный IP-адрес.Поскольку частные IP-адреса могут быть проблемой, я пришел к выводу, что каждый экземпляр EC2 должен опрашивать сообщения с длительным тайм-аутом (20 с).

Какой лучший способ добиться следующего

  • Любой экземпляр EC2 может опубликовать «config X изменился»
  • Каждый экземпляр EC2 получит сообщение «config X изменился»
  • Чистый способ отписаться от экземпляров EC2, когда
    • anЭкземпляр EC2 полностью остановлен (например, ServletListener для обнаружения закрытия приложения)
    • Экземпляр EC2 внезапно остановлен / завершен
  • Нет повторных сообщений
  • Обнаружение мертвых подписчиков (например, никаких сообщений, собранных в течение 15 минут), а затем завершение работы этого подписчика (например, завершение экземпляра EC2)
  • Работа со всеми экземплярами EC2 в среде beanstalk
  • Также работа с удаленной машины разработки

Что было бы действительно хорошо, если бы вы могли получить балансировщик нагрузки Elastic Beanstalk для пересылки сообщений SNS каждомуЭкземпляр EC2 ?

Спасибо.

...