как восстановить после исчерпания хранилища сообщений? - PullRequest
3 голосов
/ 02 января 2012

когда брокер activemq заполняется сообщениями, или потребитель терпит неудачу, он прекращает принимать сообщения, как только достигнут определенный (настраиваемый) лимит. В Broker Networks этот эффект может разрушить весь кластер.

В настоящее время я использую конфигурацию по умолчанию для ограничения памяти и испытываю следующее поведение:

  1. потребитель отказывает или становится очень медленным (известная проблема)
  2. брокер A (тот, к которому подключается потребитель) заполняется и перестает принимать сообщения
  3. все остальные брокеры заполняются и перестают принимать сообщения
  4. кластер в основном не работает

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

Как мне настроить пределы памяти таким образом, чтобы мои продуктивные пункты назначения были ограничены и заблокированы, но брокер все еще мог принимать рекомендации, чтобы мой потребитель мог возобновить работу?

1 Ответ

0 голосов
/ 03 марта 2012

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

Я бы попробовал что-то вроде этого (при условии, что коробка объемом 8 ГБ или около того) ...

  • везде используется аварийное переключение (соединения с брокером / клиентом)
  • увеличение кучи JVM до 4 ГБ
  • существенно увеличить ограничения системного использования (memoryUsage 3 ГБ, storeUsage / tempUsage = 10 ГБ)
  • включить управление потоком производителя как по темам, так и по очередям
    • установить ограничение памяти в 2 ГБ, деленное на общее количество тем + очередей
    • другими словами, в целом это должно быть существенно меньше предела использования памяти
    • исключить консультативные темы из управления потоком производителя (они могут быть уже)

Это должно ограничивать производителей и оставлять ресурсы для вашей системы для функционирования / восстановления / приема пользовательских соединений ...

...