Contrôle de flux pour les souscriptions
Actuellement le contrôle de flux limite le nombre de messages envoyés à chaque délivrance avec le test suivant (méthode deliver() de ClientSubscription) :
if (active < deliverables.size())
Ce contrôle ne limite pas le nombre de messages en cours d'acquittement. Ces messages sont représentés par la table 'deliveredIds'.
La taille de la table 'deliveredIds' ne doit pas être trop grande. En effet les identifiants sont stockés en bloc (dans ClientSubscription). Si le nombre de messages dépasse 100.000, alors la table stockée prend plusieurs Mo et peut même dépasser la taille d'un fichier de log.
En remplaçant 'deliverables' par 'deliveredIds', le contrôle de flux permet de limiter le nombre de messages en attente. La taille de 'deliveredIds' est inférieur à 'active'.
if (active < deliveredIds.size())
Par ailleurs, la méthode 'acknowledge' devrait appeler 'deliver' quand la taille de 'deliveredIds' repasse sous un seuil, par exemple active/2.
[JORAM-224] created at 2015-02-03 17:50:15 by feliot, version JORAM_5_10_0