issue:dubbo-go-hessian2 的使用问题

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 方法中: 1 QueryDataSource func(ctx context.Context, id int) (*DataSource, error) dubbo:"queryDataSource" 根本原因是类型不匹配:在 Go 中,int 和 int64 通常都是 8 字节,而在 Java 中,int 类型只有 4 字节。 这种差异导致 Java 无法正确识别要调用的方法。 解决方案: 将 Go 方法中的 int 参数更改为 int32。 1 QueryDataSource func(ctx context.Context, id int32) (*DataSource, error) dubbo:"queryDataSource" 这个修改应该能解决类型兼容性问题。 Go 中的枚举表示 我注意到您定义的 Java 枚举类型在 Go 中表示为字符串: 1 Type string hessian:"type" // Mapped from Java enum 为了解决这个问题并确保在 Go 中正确处理枚举,我建议使用 dubbo-go-hessian2 仓库中提供的枚举生成工具。 ...

April 3, 2025 · 5 min · 860 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 连接似乎并没有被复用 源码分析 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 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.Recv() if err != nil { return err } fmt.Printf("triple bidi stream2 resp: %s\n", resp.Greeting) if err := stream.CloseRequest(); err != nil { return err } if err := stream.CloseResponse(); err != nil { return err } fmt.Printf("========>TestBiDiStream end, close stream...\n") return nil } 在其中 ...

January 17, 2025 · 8 min · 1580 words · Similarityoung