Erkundung des Spring Cloud Stream Kafka Binder Consumer Interceptor
Einführung
Spring Cloud Stream ist ein Framework, das die Entwicklung nachrichtengesteuerter Mikrodienste durch die Abstraktion von Nachrichtenbrokern wie Apache Kafka und RabbitMQ vereinfacht. Eine der leistungsstarken Funktionen von Spring Cloud Stream ist die Fähigkeit zur nahtlosen Integration mit Kafka, sodass Entwickler robuste und skalierbare ereignisgesteuerte Anwendungen erstellen können. Der Kafka-Ordner in Spring Cloud Stream bietet eine Möglichkeit, einfach eine Verbindung zu Kafka-Themen herzustellen.
In diesem Blog befassen wir uns mit der Verwendung eines Consumer-Interceptors mit Spring Cloud Stream Kafka Binder. Interceptors in Kafka bieten einen Mechanismus zum Abfangen und Ändern von Datensätzen, bevor sie von der Anwendung verwendet werden, und bieten Möglichkeiten zur Protokollierung, Metrikerfassung und Datenmanipulation.
Voraussetzungen
Bevor Sie in die Details eintauchen, stellen Sie sicher, dass Sie die folgenden Voraussetzungen erfüllen:
- Java Development Kit (JDK) 8 oder höher
- Apache Kafka
- Spring Boot 2.x oder höher
- Maven oder Gradle
Einrichten der Spring Boot-Anwendung
Zuerst richten wir ein einfaches Spring Boot-Projekt mit den notwendigen Abhängigkeiten für Spring Cloud Stream und Kafka ein.
Maven pom.xml
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-kafka</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR10</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Gradle build.gradle
dependencies { implementation 'org.springframework.boot:spring-boot-starter' implementation 'org.springframework.cloud:spring-cloud-starter-stream-kafka' testImplementation 'org.springframework.boot:spring-boot-starter-test' } dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:Hoxton.SR10" } }
Kafka Binder konfigurieren
Als nächstes konfigurieren Sie den Kafka-Ordner in der Datei application.yml.
spring: cloud: stream: bindings: input: destination: my-topic group: my-group consumer: interceptor-classes: com.example.MyConsumerInterceptor kafka: binder: brokers: localhost:9092
Erstellen eines Kafka Consumer Interceptors
Um einen Consumer-Interceptor zu erstellen, implementieren Sie die von Kafka bereitgestellte ConsumerInterceptor-Schnittstelle. Mit dieser Schnittstelle können Sie eine benutzerdefinierte Logik zum Abfangen und Verarbeiten von Datensätzen definieren, bevor sie die Anwendung erreichen.
package com.example; import org.apache.kafka.clients.consumer.ConsumerInterceptor; import org.apache.kafka.clients.consumer.ConsumerRecords; import org.apache.kafka.common.Configurable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Map; public class MyConsumerInterceptor implements ConsumerInterceptor<String, String>, Configurable { private static final Logger logger = LoggerFactory.getLogger(MyConsumerInterceptor.class); @Override public ConsumerRecords<String, String> onConsume(ConsumerRecords<String, String> records) { records.forEach(record -> { logger.info("Intercepted record: key = {}, value = {}", record.key(), record.value()); // Add your custom logic here }); return records; } @Override public void onCommit(Map offsets) { // Custom logic on commit } @Override public void close() { // Cleanup resources if necessary } @Override public void configure(Map<String, ?> configs) { // Configuration logic } }
Erstellen der Verbraucheranwendung
Erstellen Sie eine einfache Verbraucheranwendung, die Nachrichten aus einem Kafka-Thema abhört.
package com.example; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.stream.annotation.EnableBinding; import org.springframework.cloud.stream.annotation.StreamListener; import org.springframework.messaging.Message; @SpringBootApplication @EnableBinding(KafkaProcessor.class) public class KafkaConsumerApplication { public static void main(String[] args) { SpringApplication.run(KafkaConsumerApplication.class, args); } @StreamListener("input") public void handle(Message<String> message) { System.out.println("Received message: " + message.getPayload()); } }
Schnittstelle für Bindung
Definieren Sie eine Schnittstelle zum Binden des Eingabekanals an das Kafka-Thema.
package com.example; import org.springframework.cloud.stream.annotation.Input; import org.springframework.messaging.SubscribableChannel; public interface KafkaProcessor { String INPUT = "input"; @Input(INPUT) SubscribableChannel input(); }
Ausführen der Anwendung
- Starten Sie den Kafka-Broker und erstellen Sie das erforderliche Thema (Mein-Thema).
- Führen Sie die Spring Boot-Anwendung aus.
Wenn Nachrichten zum Kafka-Thema erstellt werden, fängt der MyConsumerInterceptor die Datensätze ab und Sie sollten die abgefangenen Protokollnachrichten sehen.
Abschluss
In diesem Blog haben wir untersucht, wie man einen Consumer-Interceptor mit Spring Cloud Stream Kafka Binder verwendet. Interceptors bieten eine leistungsstarke Möglichkeit, Datensätze zu verarbeiten, zu protokollieren und zu manipulieren, bevor sie von der Anwendung verwendet werden. Durch die Integration benutzerdefinierter Interceptoren können Sie die Funktionalität Ihrer Kafka-Konsumenten verbessern und wertvolle Funktionen wie Protokollierung, Metrikerfassung und Datentransformation hinzufügen.
Wenn Sie die in diesem Leitfaden beschriebenen Schritte befolgen, sollten Sie in der Lage sein, Consumer-Interceptors nahtlos in Ihren Spring Cloud Stream-Anwendungen zu implementieren und zu konfigurieren. Viel Spaß beim Codieren!
Das obige ist der detaillierte Inhalt vonErkundung des Spring Cloud Stream Kafka Binder Consumer Interceptor. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Der Umfang von JavaScript bestimmt den Zugangsumfang von Variablen, die in globale, Funktions- und Blockebene unterteilt sind. Der Kontext bestimmt die Richtung davon und hängt von der Funktionsaufrufmethode ab. 1. Scopes umfassen globaler Umfang (überall zugänglich), Funktionsumfang (nur innerhalb der Funktion gültig) und Blockebene (LET und const sind innerhalb von {} gültig). 2. Der Ausführungskontext enthält das variable Objekt, die Bereichskette und die Werte davon. Dies weist auf globale oder undefinierte in der normalen Funktion hin, die Methode richtet sich auf das Anrufobjekt, der Konstruktor auf das neue Objekt und kann auch explizit durch Anruf/Anwendung/Bindung angegeben werden. 3.. Verschluss bezieht sich auf Funktionen, die auf externe Bereiche zugreifen und sich erinnern. Sie werden häufig zur Kapselung und zum Cache verwendet, können aber verursachen

Um den Wert des HTML -Eingangsfelds zu erhalten, besteht der Kern darin, das entsprechende Element durch die DOM -Operation zu finden und das Wertschild zu lesen. 1. Verwenden Sie das Dokument. Nach dem Hinzufügen einer ID zur Eingabe können Sie das Element abrufen und den Wert durch diese Methode lesen. 2. Verwenden Sie QuerySelector, um flexibler zu sein, und Sie können Elemente basierend auf Attributen wie Name, Klasse, Typ usw. auswählen. 3.. Sie können Eingabe- oder Ereignishörer hinzufügen, um interaktive Funktionen zu erzielen, z. B. den Erhalt von Eingabeinhalten in Echtzeit; 4. Achten Sie auf das Timing der Skriptausführung, die Rechtschreibfehler und das Beurteilungen von Null und stellen Sie sicher, dass das Element vorhanden ist, bevor Sie auf den Wert zugreifen.

Es gibt zwei Kernmethoden, um den ausgewählten Optionsknopfwert zu erhalten. 1. Verwenden Sie QuerySelector, um das ausgewählte Element direkt zu erhalten, und verwenden Sie die Eingabe [name = "Your-Radio-Name"]: Überprüfter Selektor, um das ausgewählte Element zu erhalten und das Wertattribut zu lesen. Es ist für moderne Browser geeignet und hat einen präzisen Code. 2. Verwenden Sie das Dokument. Darüber hinaus müssen Sie auf die Schreibweise des Namensattributs, die Behandlung von nicht ausgewählten Situationen und die dynamische Belastung des Inhalts achten

Um JavaScript zum Erstellen eines sicheren Sandbox-Iframe zu verwenden, verwenden Sie zunächst das Sandbox-Attribut von HTML, um das Iframe-Verhalten zu begrenzen, z. Zweitens durch Hinzufügen spezifischer Token wie Zulassungen zum Entspannen von Berechtigungen nach Bedarf; Kombinieren Sie dann Postmessage (), um eine sichere Cross-Domänen-Kommunikation zu erreichen und gleichzeitig Nachrichtenquellen und -daten zu überprüfen. Vermeiden Sie schließlich häufige Konfigurationsfehler, wie z.

Die Kompositionapi in VUE3 eignet sich besser für komplexe Logik- und Typableitung, und Optionsapi eignet sich für einfache Szenarien und Anfänger. 1. Optionsapi organisiert Code nach Optionen wie Daten und Methoden und hat eine klare Struktur, aber komplexe Komponenten werden fragmentiert. 2. Die Zusammensetzung verwendet ein Setup, um die verwandte Logik zu konzentrieren, die der Wartung und Wiederverwendung förderlich ist. 3. Compositionapi realisiert konfliktfreie und parameterizierbare logische Wiederverwendung durch komponierbare Funktionen, was besser ist als Mixin; 4. COMPOSECTI hat eine bessere Unterstützung für Typscript und eine genauere Typableitung; 5. Es gibt keinen signifikanten Unterschied in der Leistung und des Verpackungsvolumens der beiden; 6.

Wenn Sie Datumsobjekte in JavaScript verwenden, müssen Sie auf die folgenden Schlüsselpunkte achten: 1. Erstellen Sie eine Instanz, um die aktuelle Zeit mit NewDate () zu erhalten oder die Zeit über Zeichenfolge, Jahr, Monat und Tag zu geben. Empfehlen Sie das ISO -Format, um die Kompatibilität zu gewährleisten. 2. Verwenden Sie Getrieberei (), GetMonth () und andere Methoden, um Datum und Uhrzeit zu erhalten und die Saite manuell zu spleißen und zu formatieren. 3.. Verwenden Sie die Methoden der GETUTC -Serie, um die UTC -Zeit zu verarbeiten, um die lokale Zeitzonenstörungen zu vermeiden. 4. Berechnen Sie das Zeitintervall nach dem Zeitstempelunterschied, achten Sie jedoch auf die Abweichungen, die durch Kreuzzeitzonen oder Tageslichtsparenzeit verursacht werden können.

Es gibt einen wesentlichen Unterschied zwischen den Webworkers und Javatheads von JavaScript in der gleichzeitigen Verarbeitung. 1. JavaScript nimmt ein Single-Thread-Modell an. Webworker ist ein unabhängiger Thread, der vom Browser bereitgestellt wird. Es ist geeignet, zeitaufwändige Aufgaben auszuführen, die die Benutzeroberfläche nicht blockieren, aber das DOM nicht bedienen können. 2. Java unterstützt echtes Multithreading von der Sprachebene, die über die Thread-Klasse erstellt wurde und für eine komplexe gleichzeitige Logik und die serverseitige Verarbeitung geeignet ist. 3.. Webworker verwenden Postmessage (), um mit dem Hauptfaden zu kommunizieren, der sehr sicher und isoliert ist. Java -Threads können Speicher teilen, sodass Synchronisierungsprobleme aufmerksam werden müssen. V.

Die Debugging komplexer JavaScript -Anwendungen erfordert systematische Verwendung von Tools. 1. Setzen Sie Breakpoints und bedingte Haltepunkte, um verdächtige Prozesse abzufangen, z. 2. Aktivieren Sie die Blackboxing-Funktion, um die Interferenz der Bibliothek von Drittanbietern zu blockieren. 3.. Verwenden Sie Debugger -Aussagen, um den Eintrag des Debugs zu kontrollieren, der auf dem Umwelturteil basiert. 4. Verfolgen Sie die Anrufverbindung über CallStack, analysieren Sie den Ausführungspfad und den variablen Status und lokalisieren Sie so die Hauptursache des Problems effizient.
