Le contrôle de la concurrence est une fonctionnalité disponible dans la bibliothèque cliente de haut niveau Pub/Sub. Vous pouvez également implémenter votre propre contrôle de la simultanéité lorsque vous utilisez une bibliothèque de bas niveau.
La compatibilité du contrôle de la simultanéité dépend du langage de programmation de la bibliothèque cliente. Pour les implémentations de langage prenant en charge les threads parallèles, tels que C++, Go et Java, les bibliothèques clientes font un choix par défaut pour le nombre de threads.
Ce choix peut ne pas être optimal pour votre application. Par exemple, si votre application d'abonné ne parvient pas à absorber le volume de messages entrants et n'est pas liée au processeur, vous devez augmenter le nombre de threads. Pour les opérations de traitement de messages nécessitant une utilisation intensive du processeur, il peut être approprié de réduire le nombre de threads.
Cette page explique le concept de contrôle de la simultanéité et comment configurer la fonctionnalité pour vos clients abonnés. Pour configurer vos clients éditeur pour le contrôle de la simultanéité, consultez Contrôle de la simultanéité.
Configurations de contrôle de simultanéité
Les valeurs par défaut des variables de contrôle de la simultanéité et les noms des variables peuvent varier d'une bibliothèque cliente à l'autre. Pour en savoir plus, consultez la documentation de référence sur les API.
Par exemple, dans la bibliothèque cliente Java, les méthodes permettant de configurer le contrôle de la simultanéité sont setParallelPullCount()
, setExecutorProvider()
, setSystemExecutorProvider()
et setChannelProvider()
.
setParallelPullCount() vous permet de décider du nombre de flux à ouvrir. Vous pouvez ouvrir d'autres flux si votre client abonné peut gérer plus de données que celles envoyées sur un seul flux, soit 10 Mbit/s.
setExecutorProvider() vous permet de personnaliser le fournisseur d'exécution utilisé pour le traitement des messages. Par exemple, vous pouvez remplacer le fournisseur d'exécuteur par un fournisseur qui renvoie un seul exécuteur partagé avec un nombre limité de threads sur plusieurs clients abonnés. Cette configuration permet de limiter le nombre de threads créés. Le nombre total de threads utilisés pour le contrôle de la simultanéité dépend du fournisseur d'exécution transmis dans la bibliothèque cliente et du nombre d'extractions parallèles.
setSystemExecutorProvider() vous permet de personnaliser le fournisseur d'exécution utilisé pour la gestion des baux. En règle générale, vous ne configurez pas cette valeur, sauf si vous souhaitez utiliser le même fournisseur d'exécuteur dans
setExecutorProvider
etsetSystemExecutorProvider
. Par exemple, vous pouvez utiliser le même fournisseur d'exécuteur si vous avez un certain nombre d'abonnements à faible débit. L'utilisation de la même valeur limite le nombre de threads dans le client.setChannelProvider() vous permet de personnaliser le fournisseur de canal utilisé pour ouvrir des connexions à Pub/Sub. En règle générale, vous ne configurez pas cette valeur, sauf si vous souhaitez utiliser le même canal sur plusieurs clients abonnés. Si vous réutilisez un canal pour un trop grand nombre de clients, des erreurs
GOAWAY
ouENHANCE_YOUR_CALM
peuvent se produire. Si ces erreurs s'affichent dans les journaux de votre application ou dans Cloud Logging, créez d'autres canaux.
Exemples de code pour le contrôle de la concurrence
C++
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage C++ qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour C++.
Go
L'exemple suivant utilise la version majeure de la bibliothèque cliente Go Pub/Sub (v2). Si vous utilisez toujours la bibliothèque v1, consultez le guide de migration vers la v2. Pour consulter la liste des exemples de code de la version 1, consultez les exemples de code obsolètes.
Avant d'essayer cet exemple, suivez les instructions de configuration pour Go du guide de démarrage rapide : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Go.
Java
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Java qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Java.
Ruby
L'exemple suivant utilise la bibliothèque cliente Ruby Pub/Sub v3. Si vous utilisez toujours la bibliothèque v2, consultez le guide de migration vers la v3. Pour afficher la liste des exemples de code Ruby v2, consultez les exemples de code obsolètes.
Avant d'essayer cet exemple, suivez les instructions de configuration pour Ruby du guide de démarrage rapide : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Ruby.
Étapes suivantes
Découvrez les autres options de diffusion que vous pouvez configurer pour un abonnement :
Gérer les échecs de messages avec une règle de réessai d'abonnement
Transférer les messages non distribués vers un sujet de lettres mortes
Rouvrir des messages déjà confirmés ou supprimer définitivement des messages
Prolonger le délai d'accusé de réception avec la gestion des baux
Recevoir et accuser réception des messages exactement une fois