ActiveMQ destinationPolicy и systemUsage Configuration - PullRequest
5 голосов
/ 04 октября 2011

Требуется некоторая помощь по настройке systemUsage и destinationPolicy, поскольку у меня возникают трудности с полным пониманием взаимосвязи между systemUsage, destinationPolicy и управлением потоком.

Все наши сообщения постоянны!продуцентFlowControl включен.

Таким образом, мы даем ActiveMQ, скажем, максимум 512 МБ кучи.

Наш systemUsage настроен следующим образом:

<systemUsage>
    <systemUsage>
        <memoryUsage>
            <memoryUsage limit="200 mb"/>
        </memoryUsage>
        <storeUsage>
            <storeUsage limit="10 gb"/>
        </storeUsage>
        <tempUsage>
            <tempUsage limit="1000 mb"/>
        </tempUsage>
    </systemUsage>
</systemUsage>

Наша политика назначения указана ниже:

<destinationPolicy>
    <policyMap>
      <policyEntries>
        <policyEntry topic=">" producerFlowControl="true" memoryLimit="1mb"> 
          <pendingSubscriberPolicy>
          </pendingSubscriberPolicy>
        </policyEntry>
        <policyEntry queue=">" producerFlowControl="true" memoryLimit="1mb"> 
        </policyEntry>
      </policyEntries>
    </policyMap>
</destinationPolicy>

Может ли кто-нибудь проверить, верно ли следующее:

Это означает, что для каждой отдельной очереди / темы ограничение памяти составляет 1 МБ.Что именно происходит при попадании в этот 1 МБ, блокируется ли очередь для продюсеров или она записывается на диск?

Общий допустимый объем памяти для всех очередей и тем составляет 200 МБ.Это означает, что у нас может быть 200 каналов, работающих на полную емкость 1 МБ.В настоящее время у нас в общей сложности 16 очередей и тем, так что, очевидно, это никогда не будет достигнуто.

Нам лучше удалить отдельную запись политики в пределе памяти и распределить память между различными каналами?

Если мы сделаем это, в какой момент они заблокируют?

Любая помощь очень ценится!Может заплатить вам немного пива!

1 Ответ

6 голосов
/ 05 октября 2011

Вы касаетесь ряда моментов, на которые я отвечу не по порядку.

memoryUsage соответствует объему памяти, назначенному хранилищу в памяти.storeUsage соответствует тому, сколько места должно быть отведено хранилищу KahaDB.Вы можете использовать один или другой, в зависимости от того, как ваш брокер должен сохранять сообщения или нет.tempUsage - это особый случай для файловых курсоров (http://activemq.apache.org/message-cursors.html) - механизм переполнения памяти из хранилища в памяти на диск при превышении лимита памяти (вы должны настроить это поведение на уровне назначения, если вы этого хотите).

policyEntry @ memoryLimit - это подлимит для отдельных назначений.

Что происходит при превышении пределов памяти, зависит от того, включено ли управление потоком производителя (PFC). Оно включено по умолчанию для очередейвыключено для тем и асинхронных отправок в очереди; все это может быть настроено в policyEntry (http://activemq.apache.org/per-destination-policies.html).

Если вы достигнете «предела памяти» при включенном PFC, ваши клиенты будут блокироваться, пока кто-то не освободит пространство, потребляя сообщенияиз хранилища. Если он выключен, отправка сгенерирует исключение (лучше, если клиент упадет, чем брокер). «Ограничение памяти» означает либо ограничение, определенное memoryUsage для всех очередей, либо ограничение для конкретной очереди (возможноударить первого до последнего).

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

...