Comment utiliser LOG Java Producer d'Alibaba Cloud

Cet article décrit comment utiliser ** LOG Java Producer ** de ** Alibaba Cloud **, une bibliothèque ** Java ** facile à utiliser et hautement configurable qui vous aide à envoyer des données à ** Log Service **. Présentation.

Contexte

Alibaba Cloud LOG Java Producer est destiné aux applications Java fonctionnant sur des Big Data et des scénarios de forte concurrence. Une bibliothèque LogHub d'écriture haute performance conçue pour. Par rapport à l'utilisation d'API et de SDK, l'utilisation d'Alibaba Cloud LOG Java Producer présente de nombreux avantages tels que la haute performance, la séparation de la logique informatique et d'E / S et l'utilisation contrôlable des ressources. il y a. Pour comprendre comment Producer fonctionne et comment il fonctionne, consultez l'article Alibaba Cloud LOG Java Producer - Un outil puissant pour la migration des journaux vers le cloud. Cet article explique comment utiliser Producer.

Comment utiliser

Vous pouvez suivre trois étapes pour utiliser Producer, comme illustré dans la figure ci-dessous.

image.png

Créer un producteur

Les objets suivants sont impliqués dans la création d'un producteur:

Configuration du projet

L'objet ProjectConfig contient des informations de point de terminaison de service pour le projet cible et des informations d'identification d'accès qui indiquent l'identité de l'appelant.

Point de terminaison de service

L'adresse d'accès finale se compose du nom du projet et du point de terminaison du service. Pour plus d'informations sur la façon de déterminer les points de terminaison de projet, voir Points de terminaison de service.

Identifiant d'accès

Vous pouvez définir la clé d'accès du producteur ou le jeton STS (Security Token Service). Si vous souhaitez utiliser des jetons STS, vous devez régulièrement créer un nouvel objet ProjectConfig et le placer dans ProjectConfig.

ProjectConfigs Si vous avez besoin d'écrire des données dans différents projets, vous pouvez créer plusieurs objets ProjectConfig et les placer dans ProjectConfigs. ProjectConfigs maintient la composition de différents projets à travers des cartes. La clé de la carte est le nom du projet et la valeur est le client du projet.

ProducerConfig ProducerConfig est utilisé pour définir des politiques sortantes. Vous pouvez spécifier différentes valeurs pour différents scénarios d'entreprise. Le tableau suivant décrit une description de ces paramètres.

image.png

Pour plus de détails, consultez [TimeoutException](https://github.com/aliyun/aliyun-log-java-producer/blob/master/src/main/java/com/aliyun/openservices/aliyun/log/producer/errors/TimeoutException. java? spm = a2c65.11461447.0.0.3ab4677338bUtr & file = TimeoutException.java) et [Tentatives](https://github.com/aliyun/aliyun-log-java-producer/blob/master/src/main/java/com/ Voir aliyun / openservices / aliyun / log / producteur / Attempt.java? Spm = a2c65.11461447.0.0.3ab4677338bUtr & file = Attempt.java).

LogProducer LogProducer est une classe d'implémentation de Producer qui n'accepte que le paramètre ProducerConfig. Après avoir préparé producteurConfig, créez une instance de Producer comme suit.

Producer producer = new LogProducer(producerConfig);

La création d'une instance de Producer crée une série de threads. Cela consomme une quantité considérable de ressources. Nous vous recommandons de n'utiliser qu'une seule instance Producer pour une application. Les threads de l'instance Producer sont répertoriés ci-dessous.

image.png

De plus, toutes les méthodes fournies par LogProducer sont thread-safe. Ces méthodes peuvent être exécutées en toute sécurité dans un environnement multithread.

Envoyer des données

Une fois que vous avez créé une instance de Producer, vous pouvez envoyer des données à l'aide des méthodes qu'il fournit.

Description des paramètres

Producer propose plusieurs façons d'envoyer des données. Les paramètres de ces méthodes sont les suivants.

image.png

Pour fusionner différentes données en un gros lot, les données doivent avoir les mêmes propriétés de projet, de magasin de journaux, de rubrique, de source et de shardHash. Nous vous recommandons de contrôler la plage de valeurs de ces cinq propriétés afin que la fonctionnalité de fusion de données fonctionne correctement et économise les ressources mémoire. Si les valeurs d'un champ, tel qu'une rubrique, ont trop de valeurs différentes, nous vous recommandons d'ajouter ces valeurs à logItem au lieu d'utiliser la rubrique directement.

Acquisition du résultat de la transmission de données

Le producteur envoie les données de manière asynchrone. Le résultat de la transmission de données doit être obtenu à partir du futur objet ou rappel renvoyé par Producer.

Future La méthode d'envoi renvoie ListenableFuture. Dans ListenableFuture, vous pouvez non seulement bloquer le thread d'E / S et appeler la méthode get () pour obtenir le résultat de la transmission de données, mais également enregistrer le rappel. Le rappel sera appelé une fois les paramètres futurs terminés. L'extrait de code suivant montre comment utiliser ListenableFuture. Vous devez enregistrer un FutureCallback pour cet avenir et envoyer le rappel au pool de threads EXECUTOR_SERVICE fourni par l'application pour exécution. Pour consulter l'exemple de code complet, [SampleProducerWithFuture.java](https://github.com/aliyun/aliyun-log-producer-sample/blob/master/src/main/java/com/aliyun/openservices/aliyun/log /producer/sample/SampleProducerWithFuture.java?spm=a2c65.11461447.0.0.3ab4677338bUtr&file=SampleProducerWithFuture.java).

ListenableFuture<Result> f = producer.send("project", "logStore", logItem);
Futures.addCallback(f,
                    new FutureCallback<Result>() {
                        @Override
                        public void onSuccess(@Nullable Result result) {
                        }

                        @Override
                        public void onFailure(Throwable t) { 
                        }
                    },
                    EXECUTOR_SERVICE);

Rappeler

À l'avenir, vous pouvez également enregistrer un rappel lorsque vous appelez la méthode d'envoi pour obtenir le résultat de la transmission de données. L'extrait de code est le suivant. L'exemple de code complet est [SampleProducerWithCallback.java](https://github.com/aliyun/aliyun-log-producer-sample/blob/master/src/main/java/com/aliyun/openservices/aliyun/log/ Voir producteur / sample / SampleProducerWithCallback.java? Spm = a2c65.11461447.0.0.3ab4677338bUtr & file = SampleProducerWithCallback.java).

producer.send(
        "project",
        "logStore",
        logItem,
        new Callback() {
            @Override
            public void onCompletion(Result result) {
            }
        });

Le rappel est implémenté par le thread interne du producteur. L'espace occupé par le batch n'est libéré qu'après l'exécution du callback correspondant. Pour éviter de bloquer Producer et de réduire le débit global, évitez d'effectuer des opérations fastidieuses sur les rappels. Il est également déconseillé d'appeler la méthode d'envoi pour réessayer d'envoyer le lot producteur. Vous pouvez augmenter la valeur du paramètre retries ou réessayer d'envoyer le lot dans le rappel de l'objet ListenableFuture.

Comparaison du futur et du rappel

Dois-je choisir Future ou Callback pour obtenir le résultat de la transmission de données? Si la logique de traitement après avoir obtenu le résultat est relativement simple et ne bloque pas le thread d'E / S Producer, utilisez le rappel direct. Sinon, nous vous recommandons d'utiliser ListenableFuture pour exécuter la logique de traitement suivante dans un thread distinct (pool).

Arrêter le producteur

Producer doit être arrêté s'il envoie moins de données ou s'il souhaite mettre fin au processus en cours. De cette façon, vous pouvez traiter entièrement les données mises en cache du producteur.

Arrêt sécurisé

Dans la plupart des cas, il est conseillé d'arrêter en toute sécurité. Vous pouvez arrêter Producer en toute sécurité en appelant la méthode close (). Cette méthode n'est renvoyée que lorsque toutes les données mises en cache de Producer ont été traitées, que tous les threads ont été arrêtés, que les rappels enregistrés ont été exécutés et que tous les futurs ont été configurés.

Vous devez attendre que toutes les données soient traitées, mais après l'arrêt de Producer, le lot mis en cache sera traité immédiatement et ne sera pas retenté en cas d'échec. Par conséquent, tant que le rappel n'est pas bloqué, vous pouvez généralement revenir immédiatement avec la méthode close.

Arrêt limité

Utilisez le mode d'arrêt restreint si vous êtes susceptible d'être bloqué lorsque le rappel est exécuté et que vous souhaitez un bref retour de la méthode close. Vous pouvez implémenter un arrêt restreint en utilisant la méthode close (long timeoutMs). S'il ne s'arrête pas complètement après le timeoutMs spécifié, une exception IllegalStateException est levée. Dans ce cas, Producer sera arrêté indépendamment du fait que les données mises en cache aient été traitées ou que le rappel enregistré ait été exécuté.

Exemple d'application

Application d'exemple Alibaba Cloud LOG Java Producer est disponible pour faciliter l'apprentissage de Producer. Fait. L'exemple couvre tout, de la création d'un producteur à son arrêt.

Recommended Posts

Comment utiliser LOG Java Producer d'Alibaba Cloud
[Java] Comment utiliser Map
Comment utiliser java Facultatif
[Java] Comment utiliser removeAll ()
Comment utiliser Java Map
Comment utiliser HttpClient de Java (Get)
Comment utiliser HttpClient de Java (Post)
[Traitement × Java] Comment utiliser les variables
Comment utiliser les méthodes de classe [Java]
[Java] Comment utiliser List [ArrayList]
Comment utiliser les classes en Java?
[Traitement × Java] Comment utiliser les tableaux
Comment utiliser les expressions Java lambda
[Java] Comment utiliser la classe Math
Comment utiliser le type enum Java
Comment déployer une application Java sur Alibaba Cloud EDAS dans Eclipse
[Java] Comment utiliser la classe File
Comment utiliser la méthode de soumission (Java Silver)
[Explication facile à comprendre! ] Comment utiliser l'instance Java
[Java] Comment utiliser la méthode toString ()
Etudier comment utiliser le constructeur (java)
[Traitement × Java] Comment utiliser la boucle
Comment utiliser et définir les classes Java, importer
[Explication facile à comprendre! ] Comment utiliser le polymorphisme Java
[Java] [Maven3] Résumé de l'utilisation de Maven3
[Traitement × Java] Comment utiliser la classe
Comment utiliser la classe Java Scanner (Remarque)
[Explication facile à comprendre! ] Comment utiliser ArrayList [Java]
[Java] Comment utiliser la classe Calendar
[Java] Découvrez comment utiliser correctement Optional
[Explication facile à comprendre! ] Comment utiliser la surcharge Java
gestion des exceptions try-catch-finally Comment utiliser java
[Explication facile à comprendre! ] Comment utiliser l'encapsulation Java
[Java] Comment utiliser la classe FileReader et la classe BufferedReader
Comment utiliser Map
Comment utiliser rbenv
Comment utiliser with_option
Comment utiliser fields_for
Comment utiliser java.util.logging
Comment utiliser la carte
Comment utiliser collection_select
Comment utiliser le framework Java avec AWS Lambda! ??
Comment utiliser active_hash! !!
Comment utiliser MapStruct
Comment utiliser TreeSet
Comment utiliser l'API Java avec des expressions lambda
[Comment utiliser l'étiquette]
Comment utiliser l'identité
[Explication facile à comprendre! ] Comment utiliser l'héritage Java [Explication de remplacement]
Comment utiliser la méthode replace () (Java Silver)