一.前言

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 GRPC 和 Dubbo 互通的更多相关文章

  1. ASP.NET Core gRPC 入门全家桶

    一. 说明 本全家桶现在只包含了入门级别的资料,实战资料更新中. 二.官方文档 gRPC in Asp.Net Core :官方文档 gRPC 官网:点我跳转 三.入门全家桶 正片: ASP.NET ...

  2. ASP.NET Core gRPC 健康检查的实现方式

    一. 前言 gRPC 服务实现健康检查有两种方式,前面在此文 ASP.NET Core gRPC 使用 Consul 服务注册发现 中有提到过,这里归纳整理一下.gRPC 的健康检查,官方是定义了标准 ...

  3. 旧 WCF 项目迁移到 asp.net core + gRPC 的尝试

    一个月前,公司的运行WCF的windows服务器down掉了,由于 AWS 没有通知,没有能第一时间发现问题. 所以,客户提出将WCF服务由C#改为JAVA,在Linux上面运行:一方面,AWS对Li ...

  4. ASP.NET Core gRPC 使用 Consul 服务注册发现

    一. 前言 gRPC 在当前最常见的应用就是在微服务场景中,所以不可避免的会有服务注册与发现问题,我们使用gRPC实现的服务可以使用 Consul 或者 etcd 作为服务注册与发现中心,本文主要介绍 ...

  5. Dapr 运用之集成 Asp.Net Core Grpc 调用篇

    前置条件: <Dapr 运用> 改造 ProductService 以提供 gRPC 服务 从 NuGet 或程序包管理控制台安装 gRPC 服务必须的包 Grpc.AspNetCore ...

  6. Asp.Net Core Grpc 入门实践

    Grpc简介 gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架. 在 gRPC 中,客户端应用程序可以直接调用不同计算机上的服务器应用程序上的方法,就像它是本地对象一样,从而更轻松地创 ...

  7. ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)

    早就听说ASP.NET Core 3.0中引入了gRPC的服务模板,正好趁着家里电脑刚做了新系统,然后装了VS2019的功夫来体验一把.同时记录体验的过程.如果你也想按照本文的步骤体验的话,那你得先安 ...

  8. 使用 ASP.NET Core 的 gRPC 服务

    将 gRPC 服务添加到 ASP.NET Core 应用 gRPC 需要gRPC包. 配置 gRPC 在 Startup.cs 中: gRPC 是通过AddGrpc方法启用的. 每个 gRPC 服务通 ...

  9. ASP.Net Core 3.1 使用gRPC入门指南

    主要参考文章微软官方文档: https://docs.microsoft.com/zh-cn/aspnet/core/grpc/client?view=aspnetcore-3.1 此外还参考了文章 ...

随机推荐

  1. Solution -「校内题」矩阵求和

    Description 共 \(T\) 组数据.对于每组数据,给定 \(a, b, n\),求 \(\sum_{i = 1}^{n} \sum_{j = 1}^{n} \gcd(a^i - b^i, ...

  2. 「游戏引擎 浅入浅出」4.1 Unity Shader和OpenGL Shader

    「游戏引擎 浅入浅出」从零编写游戏引擎教程,是一本开源电子书,PDF/随书代码/资源下载: https://github.com/ThisisGame/cpp-game-engine-book 4.1 ...

  3. go更新腾讯云DNSPod的解析记录

    纯粹练手用的,大家轻喷 获取SecretId,SecretKey 打开腾讯云,登录之后打开https://console.cloud.tencent.com/cam/capi,然后新建密钥记录生成的S ...

  4. 在centos7.6上部署前后端分离项目Nginx反向代理vue.js2.6+Tornado5.1.1,使用supervisor统一管理服务

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_102 这一次使用vue.js+tornado的组合来部署前后端分离的web项目,vue.js不用说了,前端当红炸子鸡,泛用性非常广 ...

  5. MySQL源码解析之执行计划

    MySQL源码解析之执行计划 MySQL执行计划介绍 MySQL执行计划代码概览 MySQL执行计划总结 一.MySQL执行计划介绍 在MySQL中,执行计划的实现是基于JOIN和QEP_TAB这两个 ...

  6. WPF 实现带蒙版的 MessageBox 消息提示框

    WPF 实现带蒙版的 MessageBox 消息提示框 WPF 实现带蒙版的 MessageBox 消息提示框 作者:WPFDevelopersOrg 原文链接: https://github.com ...

  7. 使用dotnet-monitor分析在Kubernetes的应用程序:Sidecar模式

    dotnet-monitor可以在Kubernetes中作为Sidecar运行,Sidecar是一个容器,它与应用程序在同一个Pod中运行,利用Sidecar模式使我们可以诊断及监控应用程序. 如下图 ...

  8. [WPF]使用DispatcherUnhandledException捕捉未经处理的异常

    使用DispatcherUnhandledException捕捉未经处理的异常 using System.Windows; namespace Test02 { /// <summary> ...

  9. 从new File("")到jdk源码

    1. 概述 今天在项目中看到下面两行代码,看注释说是获取当前工作路径,之前也没有用过这种用法,比较好奇还能这样用,所以研究了一下源码. //获取当前工作路径 File file = new File( ...

  10. LOJ#6089 小 Y 的背包计数问题 - DP精题

    题面 题解 (本篇文章深度剖析,若想尽快做出题的看官可以参考知名博主某C202044zxy的这篇题解:https://blog.csdn.net/C202044zxy/article/details/ ...