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.
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.
Vous pouvez suivre trois étapes pour utiliser Producer, comme illustré dans la figure ci-dessous.
Les objets suivants sont impliqués dans la création d'un producteur:
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.
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.
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.
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.
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.
Une fois que vous avez créé une instance de Producer, vous pouvez envoyer des données à l'aide des méthodes qu'il fournit.
Producer propose plusieurs façons d'envoyer des données. Les paramètres de ces méthodes sont les suivants.
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.
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);
À 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.
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).
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.
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.
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é.
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