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。
直接根據模板新建一個 Grpc 專案
因為我是 macOS 環境,目前 HTTP/2 無法支援 TLS,所以我設定了 Kestrel,不使用 TLS 啟用 HTTP/2。
在 go 專案找到 proto 檔案,複製貼上到 grpc 專案 greet.proto 檔案裡,並修改 csharp_namespace
然後編譯 Grpc 修改 Service 程式碼
修改 dubbo-go client 呼叫地址埠號為 5000
然後執行 client
從紀錄檔輸出我們可以看到成功進行了呼叫
dubbo-> asp.net core grpc = ok
dubbo-go 作為 server tri 協定,.NET 作為 Client grpc 呼叫。
新建一個控制檯專案,安裝 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
編寫 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
從紀錄檔輸出我們可以看到成功進行了呼叫
dotnet-> dubbo = ok
從上面測試,我們確定了 ASP.NET Core 結合 Grpc 接入 Dubbo 生態,和 dubbo 互通的可能性,我們也在積極的朝這一方向進行努力(大家都比較忙,推進慢)。
目前學習.NET Core 最好的教學 .NET Core 官方教學 ASP.NET Core 官方教學
.NET Core 交流群:923036995 歡迎加群交流
如果您認為這篇文章還不錯或者有所收穫,您可以點選右下角的【推薦】支援,或請我喝杯咖啡【讚賞】,這將是我繼續寫作,分享的最大動力!