Refresh Message Cursor (-REFRESH)
Utilisez la commande d’adaptateur Refresh Message Cursor (-REFRESH) pour vous assurer que les messages de priorité plus élevée sont placés en file d’attente avant les messages existants avec une priorité moindre, de sorte que les messages de priorité supérieure puissent déclencher l’exécution Cette commande n'est utilisée que lors de l'utilisation d'une entrée d'événement IBM® MQ avec le moteur de flux. Si les messages d’une priorité plus élevée sont placés dans la file d’attente après les messages d’une priorité inférieure, le comportement par défaut est que les messages de priorité plus élevée ne déclenchent pas les mappes.
-REFRESH [reset_time]- Option
- Description
- reset_time
- Il s’agit d’un entier non négatif définissant le nombre de secondes qui doivent s’écouler avant que le curseur de message ne soit réinitialisé à la tête de la file d’attente.
La commande d’adaptateur Refresh Message Cursor (-REFRESH) réinitialise le curseur de message du programme d’écoute des événements de la file d’attente source en tête de la file d’attente une fois que chaque cycle du programme d’écoute (détection de tous les messages actuellement dans la file d’attente) est terminé. Vous pouvez éventuellement spécifier un argument entier non négatif (reset_time) qui définit le nombre de secondes qui doivent s’écouler avant que le curseur de message ne soit réinitialisé en tête de la file d’attente. Si reset_time est défini sur zéro, le curseur de message sera constamment réinitialisé au début de la file d’attente après chaque événement. Par conséquent, les messages de priorité plus élevée sont traités dès que possible. Toutefois, le repositionnement fréquent du curseur entraînera une dégradation des performances globales.
La commande d'adaptateur Refresh Message Cursor (-REFRESH) n'est requise que lors de l'utilisation d'une entrée d'événement IBM® MQ avec le moteur de flux, et uniquement dans deux situations spécifiques :
- Lorsque des messages de priorité supérieure sont placés au début de la file d’attente et ne sont pas reconnus parce que le curseur de message a déjà commencé à se déplacer vers le bas de la file d’attente.
- Lorsqu’il existe une possibilité que le curseur de message ignore les messages non validés dans la file d’attente. A titre d’exemple, supposons que deux applications, APP1 et APP2, placent simultanément des messages dans une file d’attente vide et que la séquence d’opérations suivante se produise (une possibilité car APP1 et APP2 sont indépendantes et s’exécutent simultanément) :
T0: APP1 PUT(M1) T1 : APP2 PUT(M2) T2 : APP2 COMMIT(M2) T3 : APP1 COMMIT(M1)
Une fois que T1 a lieu, les deux messages ont déjà été placés dans la file d’attente (avec M1 devant M2). Toutefois, ils ne sont pas reconnus par le curseur de message. Une fois que T2 a lieu, le curseur de message reconnaît le message M2 et il se positionne sur ce message. Après l’exécution de T3, le message M1 est également validé, mais il se trouve maintenant au-delà du curseur de message. Le curseur de message ne pourra jamais reconnaître ce message sauf s’il est repositionné au début de la file d’attente. Utilisez la commande d’adaptateur Refresh Message Cursor (-REFRESH) pour effectuer ce repositionnement.
- L’option de restauration du paramètre sur Sur échec ne doit pas être utilisée.
- L’option Conserver du paramètre OnSuccess ne doit pas non plus être utilisée.
Si l'une de ces deux options est spécifiée, l'exécution du moteur de flux pendant une longue période avec un grand nombre de messages en cours de traitement peut entraîner une utilisation excessive de la mémoire et ralentir considérablement le temps de traitement, ce qui peut entraîner l'arrêt du système.
Cela est dû au fait que les messages une fois vus par le curseur sont ajoutés à la liste interne et, tant qu’ils ne sont pas supprimés de la file d’attente source, ils ne sont pas non plus supprimés de la liste de l’adaptateur interne afin qu’ils ne soient pas traités plus d’une fois. Les messages ne sont libérés de la liste interne qu’une fois qu’ils ont été supprimés de la file d’attente source.
Dans les situations où il est nécessaire d’utiliser la commande d’adaptateur Refresh Message Cursor (-REFRESH) et de conserver les messages pour la mappe en échec, il est recommandé d’utiliser la commande d’adaptateur Error Queue Name (-EQN) en combinaison avec la commande d'adaptateur -REFRESH pour la carte d'entrée. Dans ce cas, le paramètre doit être Supprimer et le paramètre doit être Restaurer. Les messages relatifs à l’échec de la mappe sont placés dans la file d’attente des erreurs et supprimés de la file d’attente source. Par conséquent, les messages sont conservés (dans la file d’attente des erreurs) et aucune fuite de mémoire ne se produira car il sera possible de supprimer des messages de la liste de l’adaptateur interne lors de leur déplacement dans la file d’attente des erreurs. Notez toutefois que si, pour une raison quelconque, les messages ne peuvent pas être stockés dans la file d’attente des erreurs (par exemple, si l’option PUT est désactivée pour la file d’attente des erreurs), les messages resteront dans la file d’attente d'entrées et dans la liste de l’adaptateur interne, ce qui entraîne une fuite de mémoire possible.