net core 3.0 之Grpc新特性小试牛刀

作者: 


  总结下来就是,跨平台,可靠,通信快,扩展性强,网络消耗小,模板多语言通用

  光说好处,没有弊端吗,自然是有的

  最大的问题可能就是无法直接通过浏览器调用Grpc服务,最主要是Grpc使用了Http/2传输而浏览器不允许调用方需要使用 HTTP/2,或提供对基础 HTTP/2 框架的访问

但是官方也提供了曲线救国的方式,gRPC Web是 gRPC 团队提供有限的 gRPC 支持在浏览器中的其他技术(引用官方文档)。

  话不多说,咱们直接先上两个官方链接,

  https://grpc.io/docs/

  https://docs.microsoft.com/zh-cn/aspnet/core/grpc/?view=aspnetcore-3.0

  和HttpApi有啥区别,如下图

640?wx_fmt=png

  看的出来微软对Grpc得支持还挺上心得,居然把Grpc放到3.0中直接提供官方支持,还可以直接生成应模板,看来微软真的在开源的道路上大步前行啊。

咱就不说一些理论性的东西了,上边链接里得文章介绍得比我官方详细。现在.NetCore 3.0还处于预览版,正式版出来相信会有更好的支持和体验

  Grpc在3.0中, 也是遵循微软一贯的风格,对开发者友好,极度舒适得开发体验。重大变化的变化

3.0支持编写好的.proto文件直接. 方法名,就可以使用,无需把proto文件生成为.cs 文件再引用到项目中(微软默默帮我们做好了,咱只要定义好protoi接口和参数,关心代码业务就行了)??

  老的Grpc使用方式及介绍点这里,之前有介绍

  咱们实际运用起来效果如何,开发用起来爽不爽,咱也不废话,直接开整

     开发工具:Visual Studio 2019

  框架:.net core 3.0 (目前最新版 v3.0.100-preview8)

  3.0目前处于预览版,官方没有集成到vs里,咱们要手动下载 点这里

  下载好了之后要在VS里手动开启支持3.0 .net core SDK(目前3.0只能在VS2019上运行,正式版出来可能会支持其他版本VS)

640?wx_fmt=png

一、创建项目

  两种方式,都可以

  1、通过命令一键生成基于Grpc模板的项目

640?wx_fmt=png

  2、通过传统方式创建

640?wx_fmt=png

  创建好的项目长这样

640?wx_fmt=png

我们一定会注意到 Startup 类中 ConfigureServices 方法的语句 services.AddGrpc() 。这个是惯例,不用去管,重点看 Configure 方法里的代码片段:

app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService<GreeterService>();
});

  此处和WCF 的思想类似,将服务添加到路由终结点,让客户端连接。

  接下来看看proto文件 ,咱们稍微改造一下

syntax = "proto3";
option csharp_namespace = "GrpcGreeter";

package Greet;

service Greeter {
// 方法体
rpc SayHello (HelloRequest) returns (HelloReply);

//这是咱新增的方法
rpc HelloWorld (HelloRequest) returns (HelloReply);
}


// 请求参数
message HelloRequest {
string name = 1;

}


// 响应实体
message HelloReply {
string message = 1; //数据类型和C#大差不差
int32 code=2;
}

  咱们再创建一个控制台程序用做客户端好了(实际项目中就是各个模块的其他项目),用来调用Grpc微服务。

  创建好了后,安装Nuget包


Install-Package Grpc.Net.Client -Version 0.1.22-pre3

Install-Package Google.Protobuf

Install-Package Grpc.Tools

  把proto文件复制到客户端项目中

  这里有一点要住,把解决方案文件打开,把里面有配置


<ItemGroup>

   <!-- GrpcServices="Client" 添加该属性构建相关客户端类文件(元数据) -->

   <!-- GrpcServices="Server" 添加该属性构建相关服务端端类文件(元数据) -->

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

  </ItemGroup>

  可以看到如下图,重点介绍一下新特性,可以像正常些C#代码一样,直接点出Grpc里定义的方法

640?wx_fmt=png

一顿操作猛如虎

640?wx_fmt=png

代码相对简单直接截图,最后直接上结果,咱们一看就懂

客户端执行结果

640?wx_fmt=png

服务端输出

640?wx_fmt=png

在3.0版本之前,要使用Grpc微服务,proto文件需要先生成好CS类文件,生成CS类文件还是比较费事儿的.然后把生成好的CS类文件引用到项目中才可以。其实在开发中我们并不需要关心这些,只是由于.net 跨平台来的稍稍晚一点,慢慢的这些脚手架类的东西会越来越完善

可以看出微软也预见了这些事,在.net core 3.0提供了类似自动化的支持。

原文链接:https://www.cnblogs.com/DanielYao/p/11394243.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

640?wx_fmt=jpeg

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

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

相关文章

CF1168D Anagram Paths(由必要到充分/虚树)

CF1168D Anagram Paths 对于这道题首先有一个关键的性质&#xff0c;那就是对于一个树&#xff0c;它是可重排的&#xff0c;当且仅当在树上任意一个节点&#xff0c;所有字母在相关联的字符串中出现次数最大值之和小于当前点到叶子的距离。这个性质可以通过归纳证明&#xff0…

基于Coravel定时任务之计算总页数

在物联网系统中&#xff0c;需要计算底端所有设备的总数&#xff0c;除以分页每页显示数量&#xff0c;进行一个总页数的显示。包括状态&#xff0c;告警&#xff0c;日志等等数据都需要对应的总页数的显示。2.1 TaskSchedulerTaskScheduler库只支持.net&#xff0c;且需要结合…

Docker系列之AspNetCore Runtime VS .NetCore Runtime VS SDK(四)

接下来我们就要慢慢步入在.NET Core中使用Docker的殿堂了&#xff0c;如题在开始之前&#xff0c;我们需要搞清楚一些概念&#xff0c;要不然看到官方提供如下一系列镜像&#xff0c;我们会一脸懵逼&#xff0c;不知道到底要使用哪一个。AspNetCore Runtime VS .NetCore Runti…

.NET Core跨平台部署于Docker(Centos)- 视频教程

.NET Core跨平台部署于Docker,Docker部署于Centos中&#xff0c;演示跨平台特性&#xff01;以下视频教程&#xff0c;请带上耳机开始聆听往期教程&#xff1a;.NET开发框架(一)-框架介绍与视频演示.NET开发框架(二)-框架功能简述.NET开发框架(三)-高可用服务器端设计.NET开发框…

【清华集训2014】Sum)(类欧几里得算法)

【清华集训2014】Sum 然后本质上我们需要求解的就是那个带根号式子的奇偶性&#xff0c;然后我们发现这个式子很像是类欧几里得算法&#xff0c;求解一个斜率为无理数直线下的整点个数&#xff0c;然后我们直接对于一般形式求解&#xff0c;那么就是每次利用整数部分将斜率减小…

一本让我多花2倍时间读的书

这里是Z哥的个人公众号每周五11&#xff1a;45 按时送达当然了&#xff0c;也会时不时加个餐&#xff5e;我的第「87」篇原创敬上Hi&#xff0c;大家好&#xff0c;我是Z哥。熟悉我的小伙伴应该知道&#xff0c;我平时看书大多都很快&#xff0c;之前还把自己的速读技巧分享给了…

[NOI2005]月下柠檬树 (自适应辛普森)

P4207 [NOI2005]月下柠檬树 如图&#xff0c;我们要求的面积就是这些圆形跟梯形的组合&#xff0c;由于投射到地面上&#xff0c;显然有h′htanθh \frac{h}{tan \theta}h′tanθh​&#xff0c;由此我们就可以开始推导这个f(x)f(x)f(x)函数了。 所以转换为我们要推导出直线a…

Kong 1.3发布,原生gRPC代理、上游TLS交叉认证

Kong 1.3 发布了&#xff0c;此版本亮点包括支持原生 gRPC 代理、上游 TLS 交叉认证&#xff0c;以及一系列新功能和性能改进。原生 gRPC 代理越来越多的用户转向微服务架构&#xff0c;并且希望有对原生 gRPC 代理的支持&#xff0c;Kong 1.3 解决了这个问题&#xff0c;为支持…

对Windows桌面应用程序进行UI自动化测试

所谓UI自动化测试&#xff0c;就是模拟一个用户&#xff0c;对应用程序的UI进行操作&#xff0c;以完成特定场景的功能性集成测试。要对Windows桌面应用程序进行UI自动化测试&#xff0c;目前可选的技术主要是两种&#xff1a;VS自带的CodedUI Test和AppiumWinAppDriver。但是&…

项目实战中如何使用抽象类和接口

引子&#xff1a;时常会有这么一个疑惑&#xff0c;抽象类和接口功能好像&#xff0c;真正用起来该如何抉择呢&#xff1f;&#xff1f;好问题。。来看看书上怎么说的&#xff08;C#7.0本质论&#xff09;虽然方法可在基类中声明为抽象成员&#xff0c;但是&#xff01;&#x…

番茄日志发布1.0.3版本-增加Kafka支持

番茄日志&#xff08;TomatoLog&#xff09;能做什么可能你是第一次听说TomatoLog&#xff0c;没关系&#xff0c;我可以从头告诉你&#xff0c;通过了解番茄日志&#xff0c;希望能帮助有需要的朋友&#xff0c;番茄日志处理将大大降低你采集、分析、处理日志的过程。介绍Toma…

ArangoDB 3.5发布:流事务API、蒙面数据、搜索性能大幅提升、最短路径功能

ArangoDB 3.5 发布了。ArangoDB 是一个分布式原生的多模型数据库&#xff0c;具有灵活的文档、图形和键值数据模型。使用方便的 SQL 查询语言或 JavaScript 扩展构建高性能应用程序。此版本亮点包括&#xff1a;期待已久的 Streaming Transactions API&#xff0c;可以直接使用…

ASP.NET Core on K8S深入学习(7)Dashboard知多少

本篇已加入《.NET Core on K8S学习实践系列文章索引》&#xff0c;可以点击查看更多容器化技术相关系列文章。在第二篇《部署过程解析与Dashboard》中介绍了如何部署Dashboard&#xff0c;但是没有更多地介绍如何使用Dashboard&#xff0c;本文就来对Dashboard的使用进行补充。…

【学习笔记】Docker - 02. 在容器中运行软件(上)

2.1 控制容器: 构建一个网站监视器 需求: 客户想让你做一个网站, 这个网站需要被紧密的监视, 如果服务器宕机了, 那么它们的团队会收到相关的邮件. 这里用到了3个容器. 第一个运行NGINX; 第二个运行一个叫做mailer的程序. 这两个容器都是detached的. Detached 表示容器将在后台…

lintcode 有效的括号序列

心血来潮&#xff0c;半夜做了一道Lintcode的题目&#xff0c;调试完睡觉&#xff0c;欢迎大家批评指正。 public boolean isValidParentheses(String s) {// Write your code hereStack stacknew Stack();if(s.length()0){return true;}else if(s.length()1){return false;}fo…

2019 年 8 月编程语言排行榜,C#重回增长之路

至于火热的 Python&#xff0c;其占有率还是保持着一如既往的增长势头&#xff0c;由 7 月的 9.260% 上升到现在的 10.020%。C 的占有率则稍有下降&#xff0c;由 6.705% 下降到了 6.057%&#xff0c;C# 和 Visual Basic .NET 分别呈现出增长和下降的趋势。可能是本期榜单没什么…

asp.net core系列 71 Web架构分层指南

一.概述本章Web架构分层指南&#xff0c;参考了“Microsoft应用程序体系结构指南”&#xff08;该书是在2009年出版的&#xff0c;当时出版是为了帮助开发人员和架构师更快速&#xff0c;更低风险地使用Microsoft平台和.NET Framework设计和构建有效&#xff0c;高质量的应用程…

C#高级语法之泛型、泛型约束,类型安全、逆变和协变(思想原理)

一、为什么使用泛型&#xff1f;泛型其实就是一个不确定的类型&#xff0c;可以用在类和方法上&#xff0c;泛型在声明期间没有明确的定义类型&#xff0c;编译完成之后会生成一个占位符&#xff0c;只有在调用者调用时&#xff0c;传入指定的类型&#xff0c;才会用确切的类型…

谈自由,ASP.NET Core才是未来?

首先我要说一下自己对自由的理解&#xff1a;自由是我可以选择不干什么&#xff0c;但我要保留我可以干什么的可能性。比如说我现在只有一个码农的角色&#xff0c;但我仍然要保留可以扮演其他角色的可能&#xff0c;比如成为一个作者&#xff0c;当我写下文章的时候已经是了&a…

今天,全网曝光这几个公众号

有人统计过&#xff0c;我们平均每天花在看内容上的时间是5-6小时与其每天被各种看过就忘的内容占据时间不如看点真正对你有价值的信息下面小编为你推荐几个高价值的公众号&#xff0c;这些公众号都是专注.NET技术它们提供的信息能真正提高你生活的质量当你迷茫的时候刷刷这些大…