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.
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.
Es gibt drei Schritte, die Sie ausführen können, um Producer zu verwenden (siehe Abbildung unten).
Die folgenden Objekte sind an der Erstellung eines Produzenten beteiligt:
Das ProjectConfig-Objekt enthält Service-Endpunktinformationen für das Zielprojekt und Zugriffsdaten, die den Anrufer identifizieren.
Die endgültige Zugriffsadresse besteht aus dem Projektnamen und dem Service-Endpunkt. Weitere Informationen zum Ermitteln von Projektendpunkten finden Sie unter Service-Endpunkte.
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.
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.
Darüber hinaus sind alle von LogProducer bereitgestellten Methoden threadsicher. Diese Methoden können sicher in einer Multithread-Umgebung ausgeführt werden.
Nachdem Sie eine Instanz von Producer erstellt haben, können Sie die bereitgestellten Methoden zum Senden von Daten verwenden.
Der Produzent bietet mehrere Möglichkeiten zum Senden von Daten. Die Parameter dieser Methoden sind wie folgt.
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.
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);
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.
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.
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.
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.
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.
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