非protoubf模式协议互通(适用于老版本 dubbo java 应用)

如果您是 dubbo java 的老用户,可能您的 dubbo java 应用并没有使用 protobuf(直接使用 java interface 定义服务),这个时候您需要使用以下方式开发 dubbo go-client,来调用老版本的 dubbo 服务。

可在此查看本文档 完整示例源码

go-client 调用 java-server

但如果您是 dubbo java 的老用户,可能您的 dubbo java 应用并没有使用 protobuf(直接使用 java interface 定义服务),这个时候您需要使用以下方式开发 dubbo go-client,来调用老版本的 dubbo 服务。

以下方案同时支持 triple(non-protobuf) 和 dubbo 协议,你只需要调整协议配置 client.WithClientProtocolTriple() 即可。

假设我们当前的 java 服务定义如下:

package org.apache.dubbo.samples.api;

public interface GreetingsService {
    String sayHi(String name);
}

我们需要这么编写 go-client,以实现服务调用:

// 生成共享 client,指定
cliDubbo, _ := client.NewClient(
	client.WithClientProtocolDubbo(),
	client.WithClientSerialization(constant.Hessian2Serialization),
)

// 生成服务代理,这里指定 java 服务全路径名
connDubbo, _ := cliDubbo.Dial("org.apache.dubbo.samples.api.GreetingsService", client.WithURL("tri://localhost:50052"))

var respDubbo string
// 发起调用,参数以数组形式指定(标准 json 格式,可参考 java 泛化调用)
connDubbo.CallUnary(context.Background(), []interface{}{"hello"}, &respDubbo, "SayHello")

接下来我们尝试运行示例:

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

检查服务运行正常:

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

java-client 调用 go-server

这种场景,意味着您要完全从头开发 go server 服务,这时我们建议是直接使用 protbuf 来开发 go server 服务,java client 侧也使用 protobuf 对新增服务发起调用。具体使用示例请参考上一篇文档。

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