Utilisation de destinataires individuels
Consommer des messages à partir d'un flux à l'aide d'un destinataire individuel.
Si vous utilisez des destinataires individuels pour utiliser les messages à partir des flux de données au lieu des groupes de destinataires, vous ne pouvez pas tirer parti de nombreux avantages de Streaming, tels que la coordination gérée par le service, le redimensionnement horizontal et la gestion de la position. Vos applications devront gérer ces scénarios, et bien d'autres, par programmation.
Pour ces raisons, nous recommandons d'utiliser des groupes de destinataires dans les environnements de production. Toutefois, il peut être utile d'utiliser des destinataires individuels pour les applications de test ou de validation de concept.
Utilisation des curseurs
Un curseur pointe vers un emplacement dans un flux. L'emplacement peut être une position ou un moment spécifique dans une partition.
Avant de commencer à utiliser des messages, vous devez indiquer le point à partir duquel commencer l'utilisation. Vous pouvez le faire en créant un curseur.
Cinq types de curseur sont pris en charge :
TRIM_HORIZON
: début d'utilisation à partir du plus ancien message disponible dans le flux. Créez un curseur au niveau deTRIM_HORIZON
pour utiliser tous les messages dans un flux de données.AT_OFFSET
: début d'utilisation à partir d'une position spécifiée. La position doit être supérieure ou égale à la position du message le plus ancien, et inférieure ou égale à la dernière position publiée.AFTER_OFFSET
: début d'utilisation après la position donnée. Ce curseur présente les mêmes restrictions que le curseurAT_OFFSET
.AT_TIME
: début d'utilisation à partir d'une période donnée. L'horodatage du message renvoyé sera identique ou postérieur à l'heure indiquée.LATEST
: début d'utilisation des messages qui ont été publiés après la création du curseur.
Lorsque vous créez un curseur pour un destinataire individuel, vous devez spécifier la partition du flux de données que le curseur doit utiliser. Si le flux de données comporte plusieurs partitions avec des messages, vous devez créer plusieurs curseurs pour les lire.
Après avoir créé un curseur, vous pouvez commencer à consommer des messages en les récupérant.
Tant que vous consommez des messages, vous n'avez pas besoin de recréer un curseur. Créez des curseurs en dehors de vos boucles pour obtenir des messages.
Obtention des messages
Après avoir créé un curseur, obtenez (lire) les messages, en spécifiant ce curseur pour commencer à consommer les messages. Le service répond avec vos messages et la valeur d'en-tête opc-next-cursor
. Utilisez la valeur d'en-tête renvoyée lors de votre prochain appel GetMessages. Le curseur renvoyé n'est jamais NULL, mais expire au bout de cinq minutes. Si vous arrêtez d'utiliser des messages pendant plus de cinq minutes, vous devez recréer un curseur.
Si plusieurs destinataires lisent la même partition, ils reçoivent les mêmes messages. Déterminez comment votre application traite ces messages.
Si la partition ne comporte plus de messages non lus, Streaming renvoie une liste de messages vide.
Les tailles de batch GetMessages reposent sur la taille moyenne des messages publiés dans le flux de données. Par défaut, le service renvoie autant de messages que possible. Vous pouvez utiliser le paramètre limit
afin d'indiquer n'importe quelle valeur jusqu'à 10 000. Tenez toutefois compte de la taille moyenne de vos messages pour éviter de dépasser le débit sur le flux de données.
Retard
Pour déterminer si le destinataire prend du retard (la production est plus rapide que l'utilisation), vous pouvez utiliser l'horodatage du message. Si le destinataire prend du retard, envisagez de générer dynamiquement davantage de destinataires pour qu'ils reprennent certaines partitions du premier destinataire. La récupération est impossible en cas de retard sur une partition unique.
Envisagez les possibilités suivantes :
- Créez un flux de données avec davantage de partitions.
- Utilisez des groupes de destinataires.
- Si le problème est causé par un point d'accès, modifiez la stratégie de clé de message.
- Réduisez le temps de traitement des messages ou gérez les demandes en parallèle.
Pour connaître le nombre de messages restant à utiliser dans une partition particulière, utilisez un curseur de type LATEST
, obtenez la position du message publié suivant et effectuez la delta avec la position que vous utilisez actuellement.
Gestion des positions
Les positions indiquent l'emplacement d'un message dans une partition. Si le destinataire redémarre ou que vous devez effectuer une récupération suite à une panne, vous pouvez utiliser la position pour redémarrer la lecture du flux de données.
Lorsque vous utilisez des destinataires individuels, votre application destinataire doit gérer les positions traitées (reportez-vous à Validation manuelle d'un décalage). Le destinataire est responsable du stockage des positions qu'il a atteintes ou auxquelles il s'est arrêté, pour chaque partition. Lorsque le destinataire redémarre, lisez la position du dernier message traité, puis créez un curseur de type AFTER_OFFSET
et indiquez la position que vous venez d'obtenir. Nous ne donnons pas de conseils concernant le stockage de la position du dernier message traité. Vous pouvez utiliser n'importe quelle méthode, par exemple un autre flux de données, un fichier sur votre ordinateur ou Object Storage.
Les positions de message ne sont pas denses. Les positions sont des nombres à croissance monotone. Elles ne diminuent pas et augmentent parfois de plus de un. Par exemple, si vous publiez deux messages dans la même partition, le premier peut avoir la position 42 et le second la position 45 (les positions 43 et 44 étant inexistantes).