ASP.NET Core GRPC 和 Dubbo 互通
一.前言
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 项目
因为我是 macOS 环境,目前 HTTP/2 无法支持 TLS,所以我配置了 Kestrel,不使用 TLS 启用 HTTP/2。
2.同步 proto文件
在 go 项目找到 proto 文件,复制粘贴到 grpc 项目 greet.proto 文件里,并修改 csharp_namespace
然后编译 Grpc 修改 Service 代码
3.dubbo-go 调用
修改 dubbo-go client 调用地址端口号为 5000
然后运行 client
从日志输出我们可以看到成功进行了调用
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
编写 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
3.运行测试
从日志输出我们可以看到成功进行了调用
dotnet-> dubbo = ok
五.总结
从上面测试,我们确定了 ASP.NET Core 结合 Grpc 接入 Dubbo 生态,和 dubbo 互通的可能性,我们也在积极的朝这一方向进行努力(大家都比较忙,推进慢)。
相关文章
- 一题多解,ASP.NET Core应用启动初始化的N种方案[上篇]
- ASP.NET MVC 上传文件方法
- ASP.NET Core 6框架揭秘实例演示[30]:利用路由开发REST API
- ASP.NET Core解析Protobuf格式数据
- ASP.NET Core 6框架揭秘实例演示[35]:利用Session保留语境
- 【特别的骚气】asp.net core运行时注入服务,实现类库热插拔
- asp.net gridview_net core mvc 怎么做增删改查
- 宝塔面板Linux系统通过Docker部署VB.NET Asp.Net Core WebAPI应用
- .net 温故知新:【10】.NET ORM框架EFCore使用入门之CodeFirs、DBFirst
- 【愚公系列】2023年01月 .NET CORE工具案例-RedLock.net实现分布式锁
- 【愚公系列】2023年02月 .NET CORE工具案例-Workflow-Core轻量级工作流引擎(简单使用)
- 【愚公系列】2023年02月 .NET CORE工具案例-Workflow-Core轻量级工作流引擎(数据流转)
- ASP.NET Core技术--使用用户密码保护API接口
- 《ASP.NET Core 6框架揭秘》实例演示:自定义一个服务器
- .netLinux下部署ASP.NET环境指南(linux部署asp)
- .net搭建ASP.NET应用程序在Linux系统上(linux搭建asp)
- ASP编程操作MySQL数据库(asp访问mysql)
- .net利用MSSQL连接ASP.NET的办法探索(mssql 连接asp)
- 数据库ASP环境下注册MySQL数据库步骤指南(asp注册mysql)
- 在ASP.net中保存/取出图片入/从SQL数据库
- ASP.Net防止刷新自动触发事件的解决方案
- 在asp.net中实现datagridcheckbox全选的方法
- asp.net(c#)ubb处理类
- asp.net将设有过期策略的项添加到缓存中
- Asp.Net网站优化系列之数据库优化分字诀分表(纵向拆分,横向分区)
- asp.net下Oracle,SQLServer,Access万能数据库通用类
- asp.net未能写入输出文件--“拒绝访问的解决办法
- js触发asp.net的Button的Onclick事件应用
- asp.net读取磁盘文件、删除实例代码
- asp.net中生成缩略图并添加版权实例代码