码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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 项目

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

    2.go#

    直接运行 server

    image-20220927144153380

    3.运行测试#

    image-20220927144425716

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

    dotnet-> dubbo = ok

    五.总结#

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

  • 相关阅读:
    使用DevEco Studio开发一个hallo world并安装到你的遥遥领先里面
    The Log-Structured Merge-Tree (LSM-Tree) 论文阅读笔记
    Air实现Go程序的热重载(热加载)
    计算机网络学习笔记(Ⅲ):数据链路层
    rust换源
    UNVEILING THE PITFALLS OF KNOWLEDGE EDITING FOR LARGE LANGUAGE MODELS
    @EqualsAndHashCode(callSuper = true) @NoArgsConstructor @AllArgsConstructor
    基于matlab/simulink永磁直驱风力发电低电压穿越控制仿真模型
    c语言,c++,JAVA,Python应该怎么选择?
    Real- Time Rendering-图形渲染管线(The graphics rendering pipeline)
  • 原文地址:https://www.cnblogs.com/stulzq/p/16734702.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号