ASP.NET Core GRPC 和 Dubbo 互通

一.前言Dubbo 是比较流行的服务治理框架,国内不少大厂都在使用 。以前的 Dubbo 使用的是私有协议,采集用的 hessian 序列化 , 对于多语言生态来说是极度的不友好 。现在 Dubbo 发布了新版本 v3,推出了基于 gRPC 的新协议 Triple , 完全兼容 gRPC 。目前和几个小伙伴正在探索 ASP.NET Core 接入 Dubbo 生态的可行性,本文算是一个先行测试 。
【ASP.NET Core GRPC 和 Dubbo 互通】Triple 协议说明:dubbo-go 3.0 新特性 | Apache Dubbo
ASP.NET Core GRPC: Overview for gRPC on .NET | Microsoft Learn
二.测试说明Dubbo 使用的是 dubbo-go 项目提供的 samples apache/dubbo-go-samples: Apache dubbo (github.com),使用 direct 直连例子 。
ASP.NET Core Grpc 基于 .NET 5 。
分别作为 client 和 server 来测试是否能相互调用 。
三.测试一dubbo-go 作为 client 通过 tri 协议调用,ASP.NET Core 作为 Server 。
1.ASP.NET Core直接根据模板新建一个 Grpc 项目

ASP.NET Core GRPC 和 Dubbo 互通

文章插图
因为我是 macOS 环境,目前 HTTP/2 无法支持 TLS,所以我配置了 Kestrel,不使用 TLS 启用 HTTP/2 。
ASP.NET Core GRPC 和 Dubbo 互通

文章插图
2.同步 proto文件在 go 项目找到 proto 文件,复制粘贴到 grpc 项目 greet.proto 文件里 , 并修改 csharp_namespace
ASP.NET Core GRPC 和 Dubbo 互通

文章插图

ASP.NET Core GRPC 和 Dubbo 互通

文章插图
然后编译 Grpc 修改 Service 代码
ASP.NET Core GRPC 和 Dubbo 互通

文章插图
3.dubbo-go 调用修改 dubbo-go client 调用地址端口号为 5000
ASP.NET Core GRPC 和 Dubbo 互通

文章插图
然后运行 client
ASP.NET Core GRPC 和 Dubbo 互通

文章插图
从日志输出我们可以看到成功进行了调用
dubbo-> asp.net core grpc = ok
四.测试二dubbo-go 作为 server tri 协议,.NET 作为 Client grpc 调用 。
1.dotnet新建一个控制台项目 , 安装 3 个 nuget 包:
包名说明Grpc.Net.Client.NET 客户端Google.Protobufprotobuf apiGrpc.Tools支持 proto 文件生成 C# 代码编辑项目文件 .csproj
加入 proto 文件引用
<ItemGroup><Protobuf Include="..\GrpcService1\Protos\greet.proto" GrpcServices="Client" /></ItemGroup>编译时 Grpc.Tools 会根据 proto 文件生成 grpc C# client 。生成路径:obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs
ASP.NET Core GRPC 和 Dubbo 互通

文章插图
编写 client 调用代码
static async Task Main(string[] args){using var channel = GrpcChannel.ForAddress("https://localhost:20000");var client = new Greeter.GreeterClient(channel);var reply = await client.SayHelloAsync(new HelloRequest { Name = "GreeterClient" });Console.WriteLine($"Reply: Age: {reply.Age}, Id: {reply.Id}, Name: {reply.Name}");}2.go直接运行 server
ASP.NET Core GRPC 和 Dubbo 互通

文章插图
3.运行测试
ASP.NET Core GRPC 和 Dubbo 互通

文章插图
从日志输出我们可以看到成功进行了调用
dotnet-> dubbo = ok
五.总结从上面测试,我们确定了 ASP.NET Core 结合 Grpc 接入 Dubbo 生态,和 dubbo 互通的可能性,我们也在积极的朝这一方向进行努力(大家都比较忙,推进慢) 。

    推荐阅读