Si j'augmente le nombre total de requêtes à la fois, alors que le nombre augmente, la file d'attente d'échange reste bloquée sur l'un des composants.
ActiveMQ a un mécanisme pour arrêter les messages d'écriture à la production, il est appelé « controll de flux », semble que vous producteur est plus rapide que le consommateur (ou le consommateur n'est pas stable, il sa vitesse), donc d'abord vérifier la configuration memoryLimit pour votre AMQ (en le définissant aussi ou en file d'attente spéciale possible). Essayez de l'augmenter.
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry topic="FOO.>" producerFlowControl="false" memoryLimit="1mb">
<dispatchPolicy>
<strictOrderDispatchPolicy/>
</dispatchPolicy>
<subscriptionRecoveryPolicy>
<lastImageSubscriptionRecoveryPolicy/>
</subscriptionRecoveryPolicy>
</policyEntry>
</policyEntries>
</policyMap>
En outre, vous pouvez désactiver cette arrêt de traitement des messages entrants avec option producerFlowControl="false"
. Ainsi, dans le cas où tout le tampon sera utilisé, AMQ ralentira et tous les messages seront stockés en HD. Plus d'infos Producer Flow Control et Message Cursors
taille du tas de conteneur atteint de très haut et après un certain temps, il se bloque et redémarre automatiquement.
Mais de toute façon, il est juste de façon tunning de votre application, il n'est pas la solution, car toujours vous aurez le cas lorsque certaines ressources à court :)
Vous devez limiter les requêtes entrantes ou l'équilibre eux fe en utilisant Pound