Сообщения ActiveMQ продолжают очищаться - PullRequest
0 голосов
/ 12 марта 2020

Как избежать получения очистки сообщений в activemq?

У меня есть приложение переднего плана (приложение A), которое выполняет запрос к приложению (приложение B) для данных через ActiveMQ (версия 5.15.8).

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

Однако когда приложение A делает запрос к приложению B (через amq), которое получает много данных, я продолжаю получать это сообщение purged (показано ниже) в ActiveMQ active.log, а затем приложение A никогда не получает данные ,

Следует отметить, что приложение B получает запрос от приложения A, затем получает запрошенные данные и перенаправляет их обратно в ActiveMQ (чтобы затем переслать в приложение A). Но после отправки данных в ActiveMQ появляется сообщение purge :

2020-03-12 16: 29: 03,738 | ИНФО | временная очередь: // ID: mcam443-P C -61788-1748020379598-6: 1: 1 при утилизации, очистка из 1 ожидающих сообщений : org. apache .activemq.broker.region.cursors. VMPendingMessageCursor@5d237edf | org. apache .activemq.broker.region.TempQueue | ActiveMQ BrokerService [activemqPrimary] Task-89

Вот мой раздел политики назначения файла activemq. xml file

    <destinationPolicy>
        <policyMap>
          <policyEntries>
            <policyEntry queue=">" expireMessagesPeriod="120000" producerFlowControl="true" memoryLimit="5mb">
              <pendingQueuePolicy>
                <vmQueueCursor/>
              </pendingQueuePolicy>
              <pendingMessageLimitStrategy>
                <constantPendingMessageLimitStrategy limit="-1"/>
              </pendingMessageLimitStrategy>

            </policyEntry>
            <policyEntry queue="D.>" expireMessagesPeriod="120000" producerFlowControl="true" memoryLimit="5mb">
              <pendingQueuePolicy>
                <vmQueueCursor/>
              </pendingQueuePolicy>
              <pendingMessageLimitStrategy>
                  <constantPendingMessageLimitStrategy limit="-1"/>
              </pendingMessageLimitStrategy>
            </policyEntry>
          </policyEntries>
        </policyMap>
    </destinationPolicy>

Я установил expireMessagesPeriod в 4 минуты, и я вижу, что приложение B обычно отвечает в течение 2 минут. Так что, похоже, это не помогло.

Я также установил constantPendingMessageLimitStrategy равным -1, что должно отключить удаление сообщений (http://activemq.apache.org/slow-consumer-handling.html)

Снова очистка сообщение не появляется, когда приложение A делает запрос, который возвращает только небольшое количество данных.

Как мне избежать получения очистки данных по большим запросам? или вообще?

1 Ответ

0 голосов
/ 12 марта 2020

Здесь не так много информации для go, но из ограниченных данных журнала появляется сообщение о том, что очистка указывает, что вы закрыли соединение, не используя все сообщения из временного пункта назначения, и поэтому, когда соединение закрывается, временные пункты назначения это созданное распоряжение, и у того, который имелось, было 1 неиспользованное сообщение. Единственный способ избежать получения этого сообщения - убедиться, что вы использовали все сообщения из временной очереди.

...