Ziel
Entwickeln Sie Microservices auf Basis von Dubbo von Grund auf
Schwierigkeit
Niedrig
Umweltanforderungen
-
System: Windows, Linux, MacOS
-
JDK 8 und höher (JDK17 wird empfohlen)
-
Git
-
IntelliJ-IDEE (optional)
-
Docker (optional)
Hände
In diesem Kapitel erfahren Sie anhand von Schritt-für-Schritt-Anleitungen, wie Sie eine Microservice-Anwendung von Grund auf entwickeln.
1. Starten Sie das Registrierungscenter
Für eine Microservice-basierte Anwendung ist das Registrierungscenter eine unverzichtbare Komponente. Nur über das Registrierungszentrum kann der Verbraucher die Adressinformationen des Servers erfolgreich ermitteln und dann einen Anruf tätigen.
Um den Einstieg in dieses Tutorial zu erleichtern, stellen wir einen einfachen Starter auf Basis des Apache Zookeeper-Registrierungscenters zur Verfügung. Wenn Sie das Registrierungscenter in einer Produktionsumgebung bereitstellen müssen, lesen Sie bitte den Artikel Initialisierung der Produktionsumgebung, um eine hochverfügbare Registrierung bereitzustellen Center .
Windows:
git clone --depth=1 --branch master [email protected]:apache/dubbo-samples.git
cd dubbo-samples
./mvnw.cmd clean compile exec:java -pl tools/embedded-zookeeper
Linux / MacOS:
git clone --depth=1 --branch master [email protected]:apache/dubbo-samples.git
cd dubbo-samples
./mvnw clean compile exec:java -pl tools/embedded-zookeeper
Docker:
docker run --name some-zookeeper --restart always -d zookeeper
2. Projekt initialisieren
Ab diesem Abschnitt wird das Projekt auf Basis von IntelliJ IDEA erstellt und getestet.
Wie im Bild oben gezeigt, kann ein Basisprojekt erstellt werden.
Nach der Initialisierung des Projekts müssen Sie , und drei Pakete im Verzeichnis src/main/java
erstellen .org.apache.dubbo.samples.api
org.apache.dubbo.samples.client
org.apache.dubbo.samples.provider
Später erstellen wir die entsprechende Schnittstelle api
unter , client
erstellen die entsprechende Client-Abonnementdienstfunktion unter und erstellen die entsprechende Serverimplementierung und veröffentlichen die Dienstfunktion provider
unter .
Die oben genannten drei Pakete entsprechen jeweils den APIs, von denen Anwendungen abhängen, den Modulen von Verbraucheranwendungen und den Modulen von Serveranwendungen. Bei der tatsächlichen Bereitstellung muss es in drei Projekte aufgeteilt werden, wobei der Verbraucher und der Dienst vom API-Modul abhängig sind. Ausgehend von der Einfachheit wird dieses Tutorial im selben Projekt entwickelt und zwischen mehreren Startup-Klassen unterschieden.
3. Fügen Sie Maven-Abhängigkeiten hinzu
Nach der Initialisierung des Projekts müssen wir zunächst Dubbo-bezogene Maven-Abhängigkeiten hinzufügen.
Bearbeiten Sie pom.xml
diese Datei und fügen Sie die folgende Konfiguration hinzu.
<dependencies>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>3.2.0-beta.4</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-x-discovery</artifactId>
<version>4.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.8.0</version>
<exclusions>
<exclusion>
<groupId>io.netty</groupId>
<artifactId>netty-handler</artifactId>
</exclusion>
<exclusion>
<groupId>io.netty</groupId>
<artifactId>netty-transport-native-epoll</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
In dieser Konfiguration werden die Abhängigkeiten von Dubbo und Zookeeper (und dem entsprechenden Connector Curator) definiert.
Nachdem Sie die obige Konfiguration hinzugefügt haben, können Sie Maven - Reload All Maven Projects
Abhängigkeiten über IDEA aktualisieren.
4. Serviceschnittstelle definieren
Die Serviceschnittstelle Dubbo ist die Brücke zwischen dem Verbraucher und dem Server.
org.apache.dubbo.samples.api
Erstellen Sie eine Schnittstelle unter GreetingsService
und definieren Sie sie wie folgt:
package org.apache.dubbo.samples.api;
public interface GreetingsService {
String sayHi(String name);
}
In ist diese Methode GreetingsService
definiert . sayHi
Nachfolgende vom Server veröffentlichte Dienste und vom Verbraucher abonnierte Dienste konzentrieren sich alle auf GreetingsService
die Schnittstelle.
5. Definieren Sie die Serverimplementierung
Nachdem Sie die Serviceschnittstelle definiert haben, können Sie die entsprechende Implementierung auf der Serverseite definieren. Dieser Teil der Implementierung ist im Vergleich zur Verbraucherseite eine Remote-Implementierung und es gibt lokal keine relevanten Informationen.
org.apache.dubbo.samples.provider
Erstellen Sie eine Klasse unter GreetingsServiceImpl
und definieren Sie sie wie folgt:
package org.apache.dubbo.samples.provider;
import org.apache.dubbo.samples.api.GreetingsService;
public class GreetingsServiceImpl implements GreetingsService {
@Override
public String sayHi(String name) {
return "hi, " + name;
}
}
In GreetingsServiceImpl
wird die Schnittstelle implementiert GreetingsService
, für die sayHi
die Methode zurückgibt hi, name
.
6. Server-Veröffentlichungsdienst
Nach der Implementierung des Dienstes wird in diesem Abschnitt der Dienst über die Dubbo-API im Netzwerk veröffentlicht.
org.apache.dubbo.samples.provider
Erstellen Sie eine Klasse unter Application
und definieren Sie sie wie folgt:
package org.apache.dubbo.samples.provider;
import org.apache.dubbo.config.ProtocolConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.ServiceConfig;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
import org.apache.dubbo.samples.api.GreetingsService;
public class Application {
public static void main(String[] args) {
// 定义具体的服务
ServiceConfig<GreetingsService> service = new ServiceConfig<>();
service.setInterface(GreetingsService.class);
service.setRef(new GreetingsServiceImpl());
// 启动 Dubbo
DubboBootstrap.getInstance()
.application("first-dubbo-provider")
.registry(new RegistryConfig("zookeeper://127.0.0.1:2181"))
.protocol(new ProtocolConfig("dubbo", -1))
.service(service)
.start()
.await();
}
}
org.apache.dubbo.samples.provider.Application
Es werden zwei Teile der Funktionen ausgeführt: Erstens basiert es auf der ServiceConfig
Definition veröffentlichter Dienstinformationen, einschließlich Schnittstelleninformationen und entsprechender Implementierungsklassenobjekte; zweitens konfiguriert es den Dubbo-Launcher und übergibt den Anwendungsnamen, die Adresse des Registrierungscenters und das Protokoll Informationen und Serviceinformationen usw.
Hinweis: in DubboBootstrap registry
und kann mehrfach übergeben werden protocol
.service
7. Der Verbraucher abonniert und ruft an
Für die Verbraucherseite kann das Verbraucherabonnement über die API von Dubbo durchgeführt werden.
org.apache.dubbo.samples.client
Erstellen Sie eine Klasse unter Application
und definieren Sie sie wie folgt:
package org.apache.dubbo.samples.client;
import java.io.IOException;
import org.apache.dubbo.config.ReferenceConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
import org.apache.dubbo.samples.api.GreetingsService;
public class Application {
public static void main(String[] args) throws IOException {
ReferenceConfig<GreetingsService> reference = new ReferenceConfig<>();
reference.setInterface(GreetingsService.class);
DubboBootstrap.getInstance()
.application("first-dubbo-consumer")
.registry(new RegistryConfig("zookeeper://127.0.0.1:2181"))
.reference(reference);
GreetingsService service = reference.get();
String message = service.sayHi("dubbo");
System.out.println("Receive result ======> " + message);
System.in.read();
}
}
org.apache.dubbo.samples.client.Application
Drei Teile von Funktionen werden ausgeführt in :
Zunächst ReferenceConfig
werden die Abonnementdienstinformationen basierend auf definiert, einschließlich Schnittstelleninformationen.
Der zweite Schritt besteht darin, den Dubbo-Launcher zu konfigurieren und dabei den Anwendungsnamen, die Adresse des Registrierungszentrums, Protokollinformationen, Serviceinformationen usw. einzugeben.
Schließlich wird das Objekt des dynamischen Proxys abgerufen und aufgerufen.
Hinweis: DubboBootstrap unterstützt service
und reference
kann gleichzeitig übergeben werden, was bedeutet, dass eine Anwendung gleichzeitig Verbraucher und Server sein kann.
8. Starten Sie die Anwendung
Ab Schritt 7 ist der Code entwickelt. In diesem Abschnitt wird das gesamte Projekt gestartet und überprüft.
Der erste Schritt besteht darin, zu starten org.apache.dubbo.samples.provider.Application
. Nach einer Weile wird das unten gezeigte Protokoll ( DubboBootstrap awaiting
) angezeigt, was bedeutet, dass der Dienstanbieter gestartet wurde, was darauf hinweist, dass der Dienstanbieter Dienste für die Außenwelt bereitstellen kann.
[DUBBO] DubboBootstrap awaiting ..., dubbo version: 3.2.0-beta.4, current host: 169.254.44.42
Starten Sie dann org.apache.dubbo.samples.client.Application
, warten Sie eine Weile und das in der folgenden Abbildung gezeigte Protokoll wird angezeigt ( hi, dubbo
), was bedeutet, dass der Dienstverbraucher gestartet wurde und der Anruf an den Server erfolgreich empfangen wurde.
Receive result ======> hi, dubbo
Weiterführende Literatur
1. Einführung in die Dubbo-Konfiguration
Die Hauptkonfigurationseinträge von Dubbo sind ReferenceConfig
, ServiceConfig
und DubboBootstrap
. Weitere Einzelheiten finden Sie im Artikel API-Konfiguration | Apache Dubbo .
2. Andere Verwendungsmethoden neben der API-Methode
Neben der API-Methode unterstützt Dubbo auch Spring XML, Annotation, Spring Boot und andere Konfigurationsmethoden. Im nächsten Tutorial erklären wir, wie Sie mit der Spring Boot-Konfigurationsmethode eine schnelle Entwicklung durchführen.
Einzelheiten zu XML und Annotation finden Sie unter XML-Konfiguration | Apache Dubbo und Annotation-Konfiguration | Fragen zu Apache Dubbo .
Mehr
In diesem Tutorial erfahren Sie, wie Sie eine Microservice-Anwendung basierend auf der reinen API von Dubbo entwickeln. Im nächsten Tutorial stellen wir vor, wie man ein Microservice-Projekt auf Basis von Spring Boot entwickelt.
Microsoft startet neue „Windows App“ .NET 8 offiziell GA, die neueste LTS-Version Xiaomi gab offiziell bekannt, dass Xiaomi Vela vollständig Open Source ist und der zugrunde liegende Kernel NuttX Alibaba Cloud 11.12 ist. Die Ursache des Fehlers wurde offengelegt: Access Key Service (Access Schlüssel) Ausnahme Vite 5 offiziell veröffentlichter GitHub-Bericht: TypeScript ersetzt Java und wird zur drittbeliebtesten Sprache. Bietet eine Belohnung von Hunderttausenden Dollar für das Umschreiben von Prettier in Rust. Den Open-Source-Autor fragen: „Ist das Projekt noch am Leben?“ Sehr unhöflich und respektloses Bytedance: Verwendung von KI zur automatischen Optimierung von Linux-Kernel-Parameteroperatoren. Zauberoperation: Trennen Sie das Netzwerk im Hintergrund, deaktivieren Sie das Breitbandkonto und zwingen Sie den Benutzer, das optische Modem zu wechselnFühlen Sie sich frei , Dubbo unter https://github.com/apache/dubbo zu spielen.