3

ASP.NET Core GRPC 和 Dubbo 互通 - 晓晨Master

 1 year ago
source link: https://www.cnblogs.com/stulzq/p/16734702.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Dubbo 是比较流行的服务治理框架,国内不少大厂都在使用。以前的 Dubbo 使用的是私有协议,采集用的 hessian 序列化,对于多语言生态来说是极度的不友好。现在 Dubbo 发布了新版本 v3,推出了基于 gRPC 的新协议 Triple,完全兼容 gRPC。目前和几个小伙伴正在探索 ASP.NET Core 接入 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 项目

image-20220927141841880

因为我是 macOS 环境,目前 HTTP/2 无法支持 TLS,所以我配置了 Kestrel,不使用 TLS 启用 HTTP/2。

image-20220927142012130

2.同步 proto文件

在 go 项目找到 proto 文件,复制粘贴到 grpc 项目 greet.proto 文件里,并修改 csharp_namespace

image-20220927142143097
image-20220927142209500

然后编译 Grpc 修改 Service 代码

image-20220927142351864

3.dubbo-go 调用

修改 dubbo-go client 调用地址端口号为 5000

image-20220927142447583

然后运行 client

image-20220927142545905

从日志输出我们可以看到成功进行了调用

dubbo-> asp.net core grpc = ok

四.测试二

dubbo-go 作为 server tri 协议,.NET 作为 Client grpc 调用。

1.dotnet

新建一个控制台项目,安装 3 个 nuget 包:

包名 说明
Grpc.Net.Client .NET 客户端
Google.Protobuf protobuf api
Grpc.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

image-20220927143817118

编写 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}");
}

直接运行 server

image-20220927144153380

3.运行测试

image-20220927144425716

从日志输出我们可以看到成功进行了调用

dotnet-> dubbo = ok

从上面测试,我们确定了 ASP.NET Core 结合 Grpc 接入 Dubbo 生态,和 dubbo 互通的可能性,我们也在积极的朝这一方向进行努力(大家都比较忙,推进慢)。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK