写点什么

Dubbo Triple 协议

  • 2023-03-07
    广东
  • 本文字数:1961 字

    阅读完需:约 6 分钟

Triple 协议

Triple 协议为 dubbo3 主推协议,如果选 dubbo 做为底层 RPC 框架的,优先选择此协议。

说明

根据 Triple 设计的目标,Triple 协议有以下优势:


  • 具备跨语言交互的能力,传统的多语言多 SDK 模式和 Mesh 化跨语言模式都需要一种更通用易扩展的数据传输协议。

  • 提供更完善的请求模型,除了支持传统的 Request/Response 模型(Unary 单向通信),还支持 Stream(流式通信)和 Bidirectional(双向通信)。

  • 易扩展、穿透性高,包括但不限于 Tracing / Monitoring 等支持,也应该能被各层设备识别,网关设施等可以识别数据报文,对 Service Mesh 部署友好,降低用户理解难度。

  • 完全兼容 grpc,客户端/服务端可以与原生 grpc 客户端打通。

  • 可以复用现有 grpc 生态下的组件, 满足云原生场景下的跨语言、跨环境、跨平台的互通需求。

定义通信协议

syntax = "proto3";
option java_multiple_files = true;option java_package = "com.demo.stub";option java_outer_classname = "HelloWorldProto";
package com.demo.helloworld;
message HelloReq { string name = 1;}
message HelloResp { string message = 1;}service Greeter{ rpc greet(HelloReq) returns (HelloResp);}
复制代码

代码生成

通过 grpc 插件和 dubbo 插件生成,协议代码.proto 路径:src/main/proto 下默认生成代码路径:target/generated-sources/protobuf



<extensions> <extension> <groupId>kr.motd.maven</groupId> <artifactId>os-maven-plugin</artifactId> <version>${os-maven-plugin.version}</version> </extension></extensions><plugins><plugin> <groupId>org.xolstice.maven.plugins</groupId> <artifactId>protobuf-maven-plugin</artifactId> <version>${protobuf-maven-plugin.version}</version> <configuration> <protocArtifact> com.google.protobuf:protoc:${protoc.version}:exe:${os.detected.classifier} </protocArtifact> <pluginId>grpc-java</pluginId> <pluginArtifact> io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier} </pluginArtifact> <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> <goal>test-compile</goal> <goal>compile-custom</goal> <goal>test-compile-custom</goal> </goals> </execution> </executions></plugin></plugins>
复制代码

编写服务

package com.demo.interfaces;
import com.demo.stub.Greeter;import com.demo.stub.HelloReq;import com.demo.stub.HelloResp;import org.apache.dubbo.config.annotation.DubboService;
/** * 暴露服务 */@DubboServicepublic class GreeterImpl implements Greeter {
@Override public HelloResp greet(HelloReq request) { return HelloResp.newBuilder().setMessage("hello world," + request.getName()).build(); }}
复制代码

编写测试客户端

package com.demo.interfaces;
import com.demo.stub.Greeter;import com.demo.stub.HelloReq;import com.demo.stub.HelloResp;import org.apache.dubbo.config.annotation.DubboReference;import org.junit.jupiter.api.Test;import org.springframework.boot.test.context.SpringBootTest;
/** * 测试消费者 */@SpringBootTestclass GreeterImplTest {
@DubboReference private Greeter greeter;
@Test void greet() { HelloResp resp = greeter.greet(HelloReq.newBuilder().setName("zhangsan").build()); System.out.println(resp.getMessage()); }}
复制代码

配置项


spring:  application:    name: dubbo-tridubbo:  application:    name: ${spring.application.name}  protocol:    port: 9000    # triple 协议    name: tri  # 消费者默认参数  consumer:    # ms    timeout: 2000    retries: 0  reference:    com.demo.stub.Greeter:      # 直连      url: tri://192.168.1.28:9000
复制代码

源代码

dubbo-tri


发布于: 2023-03-07阅读数: 23
用户头像

路遥知马力. 2017-10-18 加入

曾就职平安、腾讯等公司。

评论

发布
暂无评论
Dubbo Triple 协议_dubbo_昵称不能为null_InfoQ写作社区