Dapr + .NET 实战(十二)服务调用之GRPC

欢迎大家参加4小时Dapr+.NET 5的实战课程

课程链接     https://ke.qq.com/course/4000292?tuin=1271860f

62726f67457ec4b233be40951883669f.png

什么是GRPC

gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架。

gRPC 的主要优点是:

  • 高性能轻量级 RPC 框架。

  • 协定优先 API 开发,默认使用协议缓冲区,允许与语言无关的实现。

  • 可用于多种语言的工具,以生成强类型服务器和客户端。

  • 支持客户端、服务器和双向流式处理调用。

  • 使用 Protobuf 二进制序列化减少对网络的使用。

这些优点使 gRPC 适用于:

  • 效率至关重要的轻量级微服务。

  • 需要多种语言用于开发的系统。

  • 需要处理流式处理请求或响应的点对点实时服务。

Dapr中的GRPC

Dapr中的GRPC与我们通常情况下使用GRPC大致是一致的,唯一的不同是Dapr中的GRPC会固定调用接口/dapr.proto.runtime.v1.AppCallback/OnInvoke,因此我们在Dapr中使用GRPC时,proto文件中不需要再定义service节点中的rpc接口,只需要定义交互使用的序列化结构体即可。

项目实战

我们继续使用FrontEnd+BackEnd项目,首先需要将BackEnd中的监听协议切换成https,因为GRPC是基于HTTP2实现的,传输层使用TLS。

public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>().UseUrls("https://*:5000");});

BackEnd

1.为BackEnd引入Nuget包

  • Dapr.AspNetCore

  • Grpc.AspNetCore

2.在BackEnd中新建Protos/greet.proto文件,定义交互的结构体

syntax = "proto3";
option csharp_namespace = "GrpcGreeter";
package greet;message HelloRequest {string name = 1;
}message HelloReply {string message = 1;
}

注意:不需要定义service.rpc接口,因为Dapr中的GRPC固定调用接口/dapr.proto.runtime.v1.AppCallback/OnInvoke。

3.修改项目文件BackEnd.csproj

<ItemGroup><Protobuf Include="Protos\greet.proto" GrpcServices="Server" /></ItemGroup>

4.新增接口类Services/HelloService

public class HelloService : AppCallback.AppCallbackBase{public override async Task<InvokeResponse> OnInvoke(InvokeRequest request, ServerCallContext context){var response = new InvokeResponse();switch (request.Method){case "sayhi":var input = request.Data.Unpack<HelloRequest>();response.Data = Any.Pack(new HelloReply { Message = "ok" });break;}return response;}}

HelloService中我们只需要定义OnInvoke方法,通过request.Method来实现不同业务的代码编写。

5.为grpc注入类

services.AddGrpc();

6.为grpc新增终结点映射

endpoints.MapGrpcService<HelloService>();

FrontEnd

1.为FrontEnd引入Nuget包

  • Google.Protobuf

  • Grpc.Net.Client

  • Grpc.Tools

2.新增Protos/greet.proto文件

syntax = "proto3";
option csharp_namespace = "GrpcGreeter";
package greet;message HelloRequest {string name = 1;
}message HelloReply {string message = 1;
}

3.修改FrontEnd.csproj文件

<ItemGroup>
<Protobuf Include="Protos\greet.proto" GrpcServices=“Client" />
</ItemGroup>

4.在DaprController中新增接口

[HttpGet("grpc")]public async Task<ActionResult> GrpcAsync(){using var daprClient = new DaprClientBuilder().Build();var result = await daprClient.InvokeMethodGrpcAsync<HelloRequest, HelloReply>("backend", "sayhi", new HelloRequest { Name = "aaa" });return Ok(result);}

测试

1.运行BackEnd

dapr run --dapr-http-port 3511 --app-port 5000 --app-id backend  --app-protocol grpc  dotnet  .\BackEnd\bin\Debug\net5.0\BackEnd.dll --app-ssl

我们通过--app-protocol grpc指明了使用grpc,通过--app-ssl指明了开启tls

2.运行FrontEnd

dapr run --dapr-http-port 3501 --app-port 5001  --app-id frontend dotnet  .\FrontEnd\bin\Debug\net5.0\FrontEnd.dll

3.调用FrontEnd的dapr/grpc接口进行测试,调用成功!!

73e4752c64100136c793ce090c84b306.png

相关文章:

  • Dapr实战(一) 基础概念与环境搭建

  • Dapr + .NET Core实战(二) 服务调用

  • Dapr + .NET Core实战(三)状态管理

  • Dapr + .NET 实战(四)发布和订阅

  • Dapr + .NET 实战(五)Actor

  • Dapr + .NET 实战(六)绑定

  • Dapr + .NET 实战(七)Secrets

  • Dapr + .NET 实战(八)服务监测

  • Dapr + .NET 实战(九)本地调试

  • Dapr + .NET 实战(十-终篇)K8S运行Dapr

  • Dapr + .NET实战(十一)单机Dapr集群负载均衡

  • 为什么 Dapr 如此令人兴奋

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296942.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SCVMM 2012 R2运维管理九之:添加非信任的Hyper-v主机和群集

SCVMM 2012 R2运维管理九之&#xff1a;添加非信任的Hyper-v主机和群集之前的博文中我们为各位朋友介绍了如何向SCVMM中添加受信任的Hyper-v的主机和群集&#xff0c;相信大家也都已经有了一个比较深刻的理解&#xff0c;那么今天的博文中就来和大家聊聊:如何添加非受信任的Hyp…

走访近20家代工厂后:近千块的大牌T恤,成本只要几十块

▲ 点击查看“很多人都知道大牌有溢价但是不知道大牌溢价逼近900%打个比方一件1000块的T恤&#xff0c;T恤成本如果是100那么剩下的900&#xff0c;算是买了个大牌logo”这是我们上个月去到的一家中国代工厂工厂内部人员向我们透露的他说&#xff0c;其实无论是纪梵希、爱马仕、…

公开征集 | 每个人都可以成为 COSCon'21 主论坛的开源明星

“ 点击蓝字 / 关注我们 ”| 作者&#xff1a;COSCon21 组委会| 编辑&#xff1a;钱奕| 设计&#xff1a;朱亿钦| 责编&#xff1a;沈于蓝在开源的世界里&#xff0c;我们常常说 Community &#xff1e; Code&#xff08;社区重于代码&#xff09;&#xff0c;Community 一词在…

linux 编写脚本示范,Linux-scripts-简单脚本和脚本的执行

9.Scripts9.1什么是 Shell scriptsshell script 是利用 shell 的功能所写的一个『程序 (program)』&#xff0c;这个程序是使用纯文本文件&#xff0c;将一些 shell 的语法与指令(含外部指令)写在里面&#xff0c;搭配正规表示法、管线命令与数据流重导向等功能&#xff0c;以达…

被质疑“在开源社区执行微软意愿”,.NET 基金会前董事为其提交的 PR 道歉并辞职...

编译&#xff5c;燕珊.NET基金会最近“不太平”。上周五&#xff0c;.NET 基金会执行董事 Claire Novotny 在其成员反对她对其中一个项目的干预后&#xff0c;为自身的行为道歉并宣布辞去职务。巧合的是一个多月前&#xff0c;董事会成员 Rodney Littles II 因与基金会的目标方…

hadoop扩充磁盘操作记录

记录cloudera扩充磁盘1、4台主机&#xff0c;每台主机增加一块2TB的硬盘2、首先简单说明步骤A、分区&#xff0c;挂载&#xff08;挂载目录&#xff08;名称&#xff0c;路径&#xff09;要一致&#xff09;B、在挂载的分区内&#xff0c;建立对应的文件夹&#xff0c;并授权C、…

单身两年以上是什么体验?

1 单身两年以上是什么体验&#xff1f;2 这群熊孩子&#xff0c;不当演员可惜了。。3 我要出去&#xff01;我要见园长&#xff01;我为幼儿园立过功&#xff01;我为幼儿园卖过萌&#xff01;4 当心&#xff01;陷阱&#xff01;&#xff01;5 一位主人抓拍下了自家的柴犬宝宝…

wince导航_宁可用手机导航,也不用汽车导航?

很多车主朋友在开车的时候&#xff0c;比较青睐的是手机导航而不是汽车导航。笔者我也是一个车主&#xff0c;我在开车的时候也是比较青睐手机导航而不是汽车导航&#xff0c;我认为主要是有以下几个原因&#xff1a;车载导航的准确性没有手机导航的高。很多车载导航的地图是在…

功能导航设计器

本程序使用C#编写&#xff1b;此模块作用为让程序功能使用人员直观的知道程序功能模块的先后顺序和操作的先后顺序&#xff1b;原理为客户端通过设计器设置程序的功能流程&#xff1b;并保存的文件服务器上&#xff1b;在使用人员程序中可以直观的调出程序模块的图示&#xff1…

.Net Core with 微服务 - 使用 AgileDT 快速实现基于可靠消息的分布式事务

前面对于分布式事务也讲了好几篇了&#xff08;可靠消息最终一致性分布式事务 - TCC分布式事务 - 2PC、3PChttps://github.com/kklldog/AgileDT 开源不易&#xff0c;大家多多 ✨✨✨回顾 前面一篇文章(可靠消息最终一致性 )我们详细介绍了基于可靠消息的分布式事务。为了更好的…

一位汉子的恋爱心得

1 每天早上起床的你。。2 喂&#xff0c;你怎么不理我&#xff01;3 最新防撕家方法。。4 塑料姐妹花&#xff0c;离得远显脸小。。心疼左一&#xff01;5 国外一位汉子的恋爱心得……6 当有人跟你说“追星有什么用&#xff0c;那些人也不认识你”。。你点的每个赞&#xff0c;…

放大器非线性失真研究装置_高效布里渊光纤放大器

来源&#xff1a;PTB新闻 主要适用于以下领域&#xff1a;精确的光频传输&#xff0c;例如用于光学时钟的远距离比较 双向放大器对于在长距离光纤链路上传输超稳定的光频必不可少&#xff0c;它们可以补偿光损耗&#xff0c;大约每100千米20 dB。由德国联邦物理技术研究院(PTB)…

利用“多说”制作留言板、评论系统

留言板和评论系统在网站建设中会经常用到&#xff0c;今天为大家介绍如何利用多说来为自己的网站制作留言板、评论系统&#xff01;注意以下只是介绍一下简单的创建设置&#xff0c;更多功能大家可以自己去探索&#xff01; 1、进入多说网站 http://duoshuo.com/ 并且登录。 2、…

CSS边界属性的负值

在CSS中&#xff0c;如果边界属性取值为负值的时候&#xff0c;元素之间的关系就会因此而变得复杂很多。 在垂直方向上&#xff0c;两个元素的边界仍然会重叠&#xff0c;但是此时一个为正值&#xff0c;一个为负值&#xff0c;最后的取值并不是取其中较大的正值&#xff0c;而…

linux切换到docker目录,Linux更改Docker运行根目录的方法

许多Linux用户在安装系统的时候&#xff0c;并没有分配/var分区&#xff0c;而在安装Docker后才发现&#xff0c;它的默认存放位置是在/var/lib/docker。因此导致了Docker在运行的很慢&#xff0c;那么要怎么解决这个问题呢?下面一起来看看解决的方法吧。解决方法&#xff1a;…

10岁高分考上大学,16岁读博的95后神童张炘炀,活成了他想要的样子吗?

全世界只有3.14 % 的人关注了爆炸吧知识开启学神模式走上人生巅峰指日可待时间过得真快&#xff0c;今年的暑假没几天就要结束了&#xff0c;刚参加完高考的孩子也将步入大学&#xff0c;开启人生的新一段旅程。 说起上大学&#xff0c;这让超模君想起了少年天才、神童张炘炀。…

带有控制按钮的图片滚动

上一次写了一个图片自动滚动功能&#xff0c;没有左右按钮控制的功能。今天花了点时间&#xff0c;写了一个带有左右按钮控制的图片滚动效果。所谓自动滚动&#xff0c;原理就是周期性的执行一个效果。在js中&#xff0c;通常是用setInterval这个函数来执行的&#xff0c;setIn…

Win11代言人官宣

微软宣布李现为中国市场的“微软零售全品牌大使”&#xff0c;代言全新 Windows 11、Surface 和 Microsoft 365 等产品。微软全新发布的 Windows 11 操作系统&#xff0c;简洁高效&#xff0c;带来耳目一新的视觉和使用体验全新升级的新一代 Surface Pro 8 惊艳上市&#xff0…

求余运算符

笔记摘自《极客学院》 求余运算&#xff08;a % b&#xff09;是计算b的多少倍刚刚好可以容入a&#xff0c;返回多出来的那部分&#xff08;余数&#xff09;。 注意&#xff1a;求余运算&#xff08;%&#xff09;在其他语言也叫取模运算。然而严格说来&#xff0c;我们看该运…

万箭齐发!COSCon' 21深圳分会场闪亮登场!

“ 点击蓝字 / 关注我们 ”| 作者&#xff1a;COSCon21 组委会| 编辑&#xff1a;钱奕| 设计&#xff1a;朱亿钦| 责编&#xff1a;沈于蓝01序言世界上最遥远的距离&#xff0c;不是生与死的距离&#xff0c;而是你在我对面办公楼&#xff0c;却不能一起嗨皮。辣么多个辗转反侧…