Pojo Serialization Compatibility Mode
This tutorial will build a simple project from scratch to demonstrate how to use Dubbo Triple based on POJO, and upgrade to the Triple protocol while the application does not change the existing interface definition. **In this mode, Triple is used in the same way as Dubbo protocol. **
For specific use cases, please refer to: [dubbo-samples-triple/pojo](https://github.com/apache/dubbo-samples/tree/master/3-extensions/protocol/dubbo-samples-triple/src/main/java /org/apache/dubbo/sample/tri/pojo);
precondition
Create project
First create an empty maven project
$ mvn archetype:generate \ -DgroupId=org.apache.dubbo \ -DartifactId=tri-pojo-demo\ -DarchetypeArtifactId=maven-archetype-quickstart\ -DarchetypeVersion=1.4 \ -DarchetypeGroupId=org.apache.maven.archetypes \ -Dversion=1.0-SNAPSHOTSwitch to the project directory
$ cd tri-pojo-demoSet JDK version in
pom.xml, add Dubbo dependencies and plugins<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> </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>3.0.8</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-zookeeper-curator5</artifactId> <type>pom</type> <version>3.0.8</version> </dependency> <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>3.19.4</version> </dependency> </dependencies>Add interface definition
src/main/java/org/apache/dubbo/Greeter.javapackage org.apache.dubbo; public interface Greeter { String sayHello(String name); }Add server-side interface implementation
src/main/java/org/apache/dubbo/GreeterImpl.javapackage org.apache.dubbo; public class GreeterImpl implements Greeter { @Override public String sayHello(String name) { return "Hello," + name + "!"; } }Add server startup class
src/main/java/org/apache/dubbo/MyDubboServer.javapackage 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 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-pojo-server")) .registry(new RegistryConfig("zookeeper://127.0.0.1:2181")) .protocol(new ProtocolConfig(CommonConstants.TRIPLE, 50051)) .service(service) .start(); System.out.println("Dubbo triple pojo server started"); System.in.read(); } }Add the client startup class
src/main/java/org/apache/dubbo/MyDubboClient.javapackage 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; 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. setTimeout(3000); bootstrap. application(new ApplicationConfig("tri-pojo-client")) .registry(new RegistryConfig("zookeeper://127.0.0.1:2181")) .reference(ref) .start(); Greeter greeter = ref. get(); String reply = greeter. sayHello("pojo"); System.out.println("Received reply:" + reply); } }Compile the code
$ mvn clean installStart the server
$ mvn org.codehaus.mojo:exec-maven-plugin:3.0.0:java -Dexec.mainClass="org.apache.dubbo.MyDubboServer" Dubbo triple pojo server startedOpen a new terminal and start the client
$ mvn org.codehaus.mojo:exec-maven-plugin:3.0.0:java -Dexec.mainClass="org.apache.dubbo.MyDubboClient" Received reply: message: "Hello, Demo!"
common problem
- protobuf class not found
Since the bottom layer of the Triple protocol needs to rely on the protobuf protocol for transmission, even if the defined service interface does not use protobuf, it is necessary to introduce protobuf dependencies into the environment.
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.19.4</version>
</dependency>
