基于 protobuf 实现 triple 协议互通(适用于两边都用 protobuf 开发的场景)

“基于 protobuf 实现 dubbo-java 与 dubbo-go 的 triple 协议互通。”

我们这里提供一个示例,演示如何使用 triple 协议实现 dubbo-java 和 dubbo-go 互通,可在此查看 示例完整源码

示例主要内容如下:

  • go,go 语言实现的 rpc server 与 client
  • java,java 语言实现的 rpc server 与 client

共享 protobuf 服务定义

共享服务定义如下,请注意以下 packagego_packagejava_package 的具体定义:

  1. //protoc --go_out=. --go_opt=paths=source_relative --go-triple_out=. greet.proto
  2. syntax = "proto3";
  3. package org.apache.dubbo.sample;
  4. option go_package = "github.com/apache/dubbo-go-samples/java_interop/protobuf-triple/go/proto;proto";
  5. //package of go
  6. option java_package = 'org.apache.dubbo.sample';
  7. option java_multiple_files = true;
  8. option java_outer_classname = "HelloWorldProto";
  9. option objc_class_prefix = "WH";
  10. // The greeting service definition.
  11. service Greeter {
  12. // Sends a greeting
  13. rpc SayHello(HelloRequest) returns (HelloReply);
  14. // Sends a greeting via stream
  15. // rpc SayHelloStream (stream HelloRequest) returns (stream HelloReply) {}
  16. }
  17. // The request message containing the user's name.
  18. message HelloRequest {
  19. string name = 1;
  20. }
  21. // The response message containing the greetings
  22. message HelloReply {
  23. string message = 1;
  24. }

java-client调用go-server

  1. 首先启动 go server:
  1. go run go/go-server/cmd/server.go

运行以上命令后,go server 运行在 50052 端口,可通过以下命令测试服务运行正常:

  1. curl \
  2. --header "Content-Type: application/json" \
  3. --data '{"name": "Dubbo"}' \
  4. http://localhost:50052/org.apache.dubbo.sample.Greeter/sayHello
  1. 启动 java client

运行以下命令,启动 java 客户端,可以看到服务调用 go server 正常输出结果:

  1. ./java/java-client/run.sh

go-client调用java-server

  1. 启动 java server

运行以下命令,启动 java 服务端:

注意,请关闭之前启动的 go server,避免出现端口占用冲突。

  1. ./java/java-server/run.sh

可通过以下命令测试服务运行正常:

  1. curl \
  2. --header "Content-Type: application/json" \
  3. --data '{"name": "Dubbo"}' \
  4. http://localhost:50052/org.apache.dubbo.sample.Greeter/sayHello
  1. 运行 go client

运行以下命令启动 go 客户端,可以看到服务调用 java server 正常输出结果:

  1. go run go/go-client/cmd/client.go

最后修改 September 13, 2024: Refactor website structure (#2860) (1a4b998f54b)