issue 关联 Environment Server: Java-server, dubbo version v3.0.14 Client: Dubbo-go, v3.1.1 Protocol: Dubbo Registry: Nacos, v2.1.2 Problem dubbo-go 的 client 端无法调用 dubbo 的 server 端的代码。 问题分析 在调试并复现代码问题后,我发现问题出在 QueryDataSource 方法中: QueryDataSource func(ctx context.Context, id int) (*DataSource, error) dubbo:"queryDataSource" 根本原因是类型不匹配:在 Go 中,int 和 int64 通常都是 8 字节,而在 Java 中,int 类型只有 4 字节。 这种差异导致 Java 无法正确识别要调用的方法。 解决方案: 将 Go 方法中的 int 参数更改为 int32。 QueryDataSource func(ctx context.Context, id int32) (*DataSource, error) dubbo:"queryDataSource" 这个修改应该能解决类型兼容性问题。 Go 中的枚举表示...

April 3, 2025 · 4 min · 728 words · Similarityoung

issue: 双向流模式中 dubbo-go 无法关闭 Tcp 连接

issue 关联 client: dubbo-go: v3.2.0-rc2 server: dubbo v3.3.0 registry: zookeeper 问题 1:biStream 客户端没有关闭长连接的接口;如果服务端不调用 onCompleted,那么 Receive 会永久 block 客户端应当具有主动 Close 能力才对,底层使用的是 grpc,而 grpc 客户端是能够主动关闭连接的。 问题 2:Java 服务端调用 onCompleted() 后,biStream.Receive 返回 EOF 但是和服务端的 TCP 连接仍然存在;我知道 dubbo client 内部是连接池,但是我测试了一下,TCP 连接似乎并没有被复用 源码分析 func TestBiDiStream2(svc greet.GreetService) error { fmt.Printf("start to test triple bidi stream 2\n") stream, err := svc.GreetStream(context.Background()) if err != nil { return err } if sendErr := stream.Send(&greet.GreetStreamRequest{Name: "stream client!"}); sendErr != nil { return err } resp, err := stream....

January 17, 2025 · 6 min · 1264 words · Similarityoung