在 IDL 中使用 Triple
本教學將透過從頭開始建置一個簡單的專案,示範如何使用基於 IDL 的 Dubbo Triple。
先決條件
建立專案
1. 建立一個空的 Maven 專案
$ mvn archetype:generate \
-DgroupId=org.apache.dubbo\
-DartifactId=tri-stub-demo \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DarchetypeVersion=1.4 \
-DarchetypeGroupId=org.apache.maven.archetypes \
-Dversion=1.0-SNAPSHOT
2. 切換到專案目錄
$ cd tri-stub-demo
3. 新增 Dubbo 相依性和外掛
在 pom.xml
中設定 JDK 版本
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<dubbo.version>3.1.7</dubbo.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
<type>pom</type>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.19.4</version>
</dependency>
</dependencies>
<build>
<extensions>
<extension>
<groupId>kr.motd.maven</groupId>
<artifactId>os-maven-plugin</artifactId>
<version>1.6.1</version>
</extension>
</extensions>
<plugins>
<plugin>
<groupId>org.xolstice.maven.plugins</groupId>
<artifactId>protobuf-maven-plugin</artifactId>
<version>0.6.1</version>
<configuration>
<protocArtifact>com.google.protobuf:protoc:3.19.4:exe:${os.detected.classifier}</protocArtifact>
<protocPlugins>
<protocPlugin>
<id>dubbo</id>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-compiler</artifactId>
<version>${dubbo.version}</version>
<mainClass>org.apache.dubbo.gen.tri.Dubbo3TripleGenerator</mainClass>
</protocPlugin>
</protocPlugins>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
4. 新增介面定義檔案
src/main/proto/hello.proto
,Dubbo 使用 Protobuf 作為 IDL
syntax = "proto3";
option java_multiple_files = true;
option java_package = "org.apache.dubbo.hello";
option java_outer_classname = "HelloWorldProto";
option objc_class_prefix = "HLW";
package helloworld;
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
service Greeter{
rpc greet(HelloRequest) returns (HelloReply);
}
5. 編譯 IDL
$ mvn clean install
編譯成功後,您可以在 target/generated-sources/protobuf/java
目錄中看到生成的程式碼檔案
$ ls org/apache/dubbo/hello/
DubboGreeterTriple.java HelloReply.java HelloRequest.java HelloWorldProto.java
Greeter.java HelloReplyOrBuilder.java HelloRequestOrBuilder.java
6. 新增伺服器介面實作
src/main/java/org/apache/dubbo/GreeterImpl.java
package org.apache.dubbo;
import org.apache.dubbo.hello.DubboGreeterTriple;
import org.apache.dubbo.hello.HelloReply;
import org.apache.dubbo.hello.HelloRequest;
public class GreeterImpl extends DubboGreeterTriple. GreeterImplBase {
@Override
public HelloReply greet(HelloRequest request) {
return HelloReply. newBuilder()
.setMessage("Hello," + request.getName() + "!")
.build();
}
}
7. 新增伺服器啟動類別
src/main/java/org/apache/dubbo/MyDubboServer.java
package org.apache.dubbo;
import org.apache.dubbo.common.constants.CommonConstants;
import org.apache.dubbo.config.ApplicationConfig;
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.hello.Greeter;
import java.io.IOException;
public class MyDubboServer {
public static void main(String[] args) throws IOException {
ServiceConfig<Greeter> service = new ServiceConfig<>();
service.setInterface(Greeter.class);
service.setRef(new GreeterImpl());
DubboBootstrap bootstrap = DubboBootstrap. getInstance();
bootstrap. application(new ApplicationConfig("tri-stub-server"))
.registry(new RegistryConfig("zookeeper://127.0.0.1:2181"))
.protocol(new ProtocolConfig(CommonConstants.TRIPLE, 50051))
.service(service)
.start();
System.out.println("Dubbo triple stub server started");
System.in.read();
}
}
8. 新增客戶端啟動類別
src/main/java/org/apache/dubbo/MyDubboClient.java
package org.apache.dubbo;
import org.apache.dubbo.common.constants.CommonConstants;
import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ReferenceConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
import org.apache.dubbo.hello.Greeter;
import org.apache.dubbo.hello.HelloReply;
import org.apache.dubbo.hello.HelloRequest;
public class MyDubboClient {
public static void main(String[] args) {
DubboBootstrap bootstrap = DubboBootstrap. getInstance();
ReferenceConfig<Greeter> ref = new ReferenceConfig<>();
ref. setInterface(Greeter. class);
ref.setProtocol(CommonConstants.TRIPLE);
ref.setProxy(CommonConstants.NATIVE_STUB);
ref. setTimeout(3000);
bootstrap. application(new ApplicationConfig("tri-stub-client"))
.registry(new RegistryConfig("zookeeper://127.0.0.1:2181"))
.reference(ref)
.start();
Greeter greeter = ref. get();
HelloRequest request = HelloRequest.newBuilder().setName("Demo").build();
HelloReply reply = greeter. greet(request);
System.out.println("Received reply:" + reply);
}
}
9. 編譯程式碼
$ mvn clean install
10. 啟動伺服器
$ mvn org.codehaus.mojo:exec-maven-plugin:3.0.0:java -Dexec.mainClass="org.apache.dubbo.MyDubboServer"
Dubbo triple stub server started
11. 開啟一個新的終端機並啟動客戶端
$ mvn org.codehaus.mojo:exec-maven-plugin:3.0.0:java -Dexec.mainClass="org.apache.dubbo.MyDubboClient"
Received reply: message: "Hello, Demo!"
上次修改時間:2023 年 3 月 3 日:將 Dubbo 版本提升至 3.1.7 (#2343) (21444baabc0)