Verwendung des LOG Java Producer von Alibaba Cloud

Dieser Artikel beschreibt die Verwendung von ** Alibaba Cloud ** 's ** LOG Java Producer **, einer benutzerfreundlichen und hoch konfigurierbaren ** Java ** -Bibliothek, mit der Sie Daten an den ** Log Service ** senden können. Wir stellen vor.

Hintergrund

Alibaba Cloud LOG Java Producer ist für Java-Anwendungen vorgesehen, die mit Big Data und Szenarien mit hoher Parallelität ausgeführt werden. Eine leistungsstarke LogHub-Schreibbibliothek für. Im Vergleich zur Verwendung von APIs und SDKs bietet die Verwendung von Alibaba Cloud LOG Java Producer viele Vorteile wie hohe Leistung, Trennung von Computer- und E / A-Logik und steuerbare Ressourcennutzung. es gibt. Informationen zur Funktionsweise und Funktionsweise von Producer finden Sie im Artikel Alibaba Cloud LOG Java Producer - Ein leistungsstarkes Tool zum Migrieren von Protokollen in die Cloud. Dieser Artikel konzentriert sich auf die Verwendung von Producer.

Wie benutzt man

Es gibt drei Schritte, die Sie ausführen können, um Producer zu verwenden (siehe Abbildung unten).

image.png

Produzenten erstellen

Die folgenden Objekte sind an der Erstellung eines Produzenten beteiligt:

Projektkonfiguration

Das ProjectConfig-Objekt enthält Service-Endpunktinformationen für das Zielprojekt und Zugriffsdaten, die den Anrufer identifizieren.

Service-Endpunkt

Die endgültige Zugriffsadresse besteht aus dem Projektnamen und dem Service-Endpunkt. Weitere Informationen zum Ermitteln von Projektendpunkten finden Sie unter Service-Endpunkte.

Zugangsdaten

Sie können den Zugriffsschlüssel oder den STS-Token (Security Token Service) des Herstellers festlegen. Wenn Sie STS-Token verwenden möchten, müssen Sie regelmäßig ein neues ProjectConfig-Objekt erstellen und in ProjectConfig einfügen.

ProjectConfigs Wenn Sie Daten in verschiedene Projekte schreiben müssen, können Sie mehrere ProjectConfig-Objekte erstellen und in ProjectConfigs einfügen. ProjectConfigs verwaltet die Zusammensetzung verschiedener Projekte über Karten. Der Schlüssel der Karte ist der Projektname und der Wert ist der Client des Projekts.

ProducerConfig ProducerConfig wird verwendet, um ausgehende Richtlinien festzulegen. Sie können unterschiedliche Werte für unterschiedliche Geschäftsszenarien angeben. Die folgende Tabelle beschreibt eine Beschreibung dieser Parameter.

image.png

Weitere Informationen finden Sie unter TimeoutException. java? spm = a2c65.11461447.0.0.3ab4677338bUtr & file = TimeoutException.java) und [Versuche](https://github.com/aliyun/aliyun-log-java-producer/blob/master/src/main/java/com/ Siehe aliyun / openservices / aliyun / log / Producer / Attempt.java? Spm = a2c65.11461447.0.0.3ab4677338bUtr & file = Attempt.java).

LogProducer LogProducer ist eine Implementierungsklasse von Producer, die nur den Parameter ProducerConfig akzeptiert. Erstellen Sie nach der Vorbereitung von ProducerConfig eine Instanz von Producer wie folgt.

Producer producer = new LogProducer(producerConfig);

Durch das Erstellen einer Instanz von Producer wird eine Reihe von Threads erstellt. Dies verbraucht eine beträchtliche Menge an Ressourcen. Wir empfehlen, dass Sie nur eine Producer-Instanz für eine Anwendung verwenden. Die Threads für die Producer-Instanz sind unten aufgeführt.

image.png

Darüber hinaus sind alle von LogProducer bereitgestellten Methoden threadsicher. Diese Methoden können sicher in einer Multithread-Umgebung ausgeführt werden.

Daten senden

Nachdem Sie eine Instanz von Producer erstellt haben, können Sie die bereitgestellten Methoden zum Senden von Daten verwenden.

Parameterbeschreibung

Der Produzent bietet mehrere Möglichkeiten zum Senden von Daten. Die Parameter dieser Methoden sind wie folgt.

image.png

Um verschiedene Daten zu einem großen Stapel zusammenzuführen, müssen die Daten dieselben Projekt-, Protokollspeicher-, Themen-, Quell- und shardHash-Eigenschaften haben. Es wird empfohlen, den Wertebereich für diese fünf Eigenschaften zu steuern, damit die Funktion zum Zusammenführen von Daten ordnungsgemäß funktioniert und Speicherressourcen gespart werden. Wenn die Werte eines Felds, z. B. eines Themas, zu viele verschiedene Werte haben, empfehlen wir, diese Werte zu logItem hinzuzufügen, anstatt das Thema direkt zu verwenden.

Erfassung des Datenübertragungsergebnisses

Der Produzent sendet Daten asynchron. Das Datenübertragungsergebnis muss von dem zukünftigen Objekt oder Rückruf erhalten werden, der vom Produzenten zurückgegeben wird.

Future Die send-Methode gibt [ListenableFuture] zurück (https://github.com/google/guava/wiki/ListenableFutureExplained?spm=a2c65.11461447.0.0.3ab4677338bUtr). In ListenableFuture können Sie nicht nur den E / A-Thread blockieren und die Methode get () aufrufen, um das Ergebnis der Datenübertragung abzurufen, sondern auch den Rückruf registrieren. Der Rückruf wird aufgerufen, nachdem die zukünftigen Einstellungen abgeschlossen sind. Das folgende Snippet zeigt, wie ListenableFuture verwendet wird. Sie müssen einen FutureCallback für diese Zukunft registrieren und den Rückruf an den von der Anwendung zur Ausführung bereitgestellten EXECUTOR_SERVICE-Thread-Pool senden. Den vollständigen Beispielcode finden Sie unter SampleProducerWithFuture.java /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);

Rückrufen

In Zukunft können Sie auch einen Rückruf registrieren, wenn Sie die Sendemethode aufrufen, um das Datenübertragungsergebnis zu erhalten. Das Code-Snippet lautet wie folgt. Der vollständige Beispielcode lautet [SampleProducerWithCallback.java](https://github.com/aliyun/aliyun-log-producer-sample/blob/master/src/main/java/com/aliyun/openservices/aliyun/log/ Siehe Producer / 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) {
            }
        });

Der Rückruf wird vom internen Thread des Produzenten implementiert. Der vom Stapel belegte Speicherplatz wird erst freigegeben, nachdem der entsprechende Rückruf ausgeführt wurde. Vermeiden Sie zeitaufwändige Vorgänge bei Rückrufen, um zu vermeiden, dass Producer blockiert und der Gesamtdurchsatz verringert wird. Es wird auch nicht empfohlen, die send-Methode aufzurufen, um das Senden des Produzentenstapels erneut zu versuchen. Sie können entweder den Wert des Parameters retries erhöhen oder erneut versuchen, den Stapel im Rückruf des ListenableFuture-Objekts zu senden.

Vergleich von Zukunft und Rückruf

Sollte ich Future oder Callback wählen, um das Ergebnis der Datenübertragung zu erhalten? Wenn die Verarbeitungslogik nach dem Abrufen des Ergebnisses relativ einfach ist und den Producer-E / A-Thread nicht blockiert, verwenden Sie den direkten Rückruf. Andernfalls empfehlen wir, ListenableFuture zu verwenden, um die nachfolgende Verarbeitungslogik in einem separaten Thread (Pool) auszuführen.

Produzent herunterfahren

Der Produzent sollte heruntergefahren werden, wenn weniger Daten gesendet werden oder wenn der aktuelle Prozess beendet werden soll. Auf diese Weise können Sie die zwischengespeicherten Daten des Produzenten vollständig verarbeiten.

Sicheres Herunterfahren

In den meisten Fällen ist es ratsam, sicher herunterzufahren. Sie können Producer sicher herunterfahren, indem Sie die Methode close () aufrufen. Diese Methode wird nur zurückgegeben, wenn alle zwischengespeicherten Daten des Produzenten verarbeitet, alle Threads beendet, registrierte Rückrufe ausgeführt und alle Futures konfiguriert wurden.

Sie müssen warten, bis alle Daten verarbeitet sind. Nach dem Herunterfahren von Producer wird der zwischengespeicherte Stapel jedoch sofort verarbeitet und bei einem Fehlschlag nicht erneut versucht. Solange der Rückruf nicht blockiert ist, können Sie daher normalerweise sofort mit der Methode close zurückkehren.

Eingeschränktes Herunterfahren

Verwenden Sie den eingeschränkten Abschaltmodus, wenn Sie wahrscheinlich blockiert werden, wenn der Rückruf ausgeführt wird, und wenn Sie die Methode close kurz zurückgeben möchten. Sie können das eingeschränkte Herunterfahren mit der Methode "close (long timeoutMs)" implementieren. Wenn es nach den angegebenen Zeitlimits nicht vollständig heruntergefahren wird, wird eine IllegalStateException-Ausnahme ausgelöst. In diesem Fall wird Producer heruntergefahren, unabhängig davon, ob die zwischengespeicherten Daten verarbeitet oder der registrierte Rückruf ausgeführt wurden.

Beispielanwendung

Alibaba Cloud LOG Java Producer-Beispielanwendung ist verfügbar, um das Erlernen von Producer zu vereinfachen. Hat. Das Beispiel deckt alles ab, von der Erstellung eines Produzenten bis zum Herunterfahren.

Recommended Posts

Verwendung des LOG Java Producer von Alibaba Cloud
[Java] Verwendung von Map
Verwendung von Java Optional
[Java] Verwendung von removeAll ()
Verwendung von Java Map
Verwendung von HttpClient (Get) von Java
Verwendung von HttpClient (Post) von Java
[Verarbeitung × Java] Verwendung von Variablen
Verwendung von Klassenmethoden [Java]
[Java] Verwendung von List [ArrayList]
Wie verwende ich Klassen in Java?
[Verarbeitung × Java] Verwendung von Arrays
Verwendung von Java-Lambda-Ausdrücken
[Java] Verwendung der Math-Klasse
Verwendung des Java-Aufzählungstyps
So stellen Sie eine Java-Anwendung in Alibaba Cloud EDAS in Eclipse bereit
[Java] Verwendung der File-Klasse
Verwendung der Submit-Methode (Java Silver)
[Leicht verständliche Erklärung! ] Verwendung der Java-Instanz
[Java] Verwendung der toString () -Methode
Studieren der Verwendung des Konstruktors (Java)
[Verarbeitung × Java] Verwendung der Schleife
Verwendung und Definition von Java-Klassen, Importieren
[Leicht verständliche Erklärung! ] Verwendung des Java-Polymorphismus
[Java] [Maven3] Zusammenfassung der Verwendung von Maven3
[Verarbeitung × Java] Verwendung der Klasse
Verwendung der Java Scanner-Klasse (Hinweis)
[Leicht verständliche Erklärung! ] Verwendung von ArrayList [Java]
[Java] Verwendung der Calendar-Klasse
[Java] Erfahren Sie, wie Sie Optional richtig verwenden
[Leicht verständliche Erklärung! ] Verwendung von Java-Überladung
try-catch-finally Ausnahmebehandlung Verwendung von Java
[Leicht verständliche Erklärung! ] Verwendung der Java-Kapselung
[Java] Verwendung der FileReader-Klasse und der BufferedReader-Klasse
Verwendung von Map
Wie benutzt man rbenv?
Verwendung mit_option
Verwendung von fields_for
Verwendung von java.util.logging
Verwendung der Karte
Verwendung von collection_select
Verwendung des Java-Frameworks mit AWS Lambda! ??
Wie benutzt man active_hash! !!
Verwendung von MapStruct
Verwendung von TreeSet
Verwendung der Java-API mit Lambda-Ausdrücken
[Verwendung des Etiketts]
Wie man Identität benutzt
[Leicht verständliche Erklärung! ] Verwendung der Java-Vererbung [Erklärung überschreiben]
Verwendung der replace () -Methode (Java Silver)