相信微服务大家伙都有听说和知道,好处弊端咱也不多说了,Grpc算是一个比较全面的微服务框架,也得到微软的支持   总结下来就是,跨平台,可靠,通信快,扩展性强,网络消耗小,模板多语言通用       光说好处,没有弊端吗,自然是有的   最大的问题可能就是无法直接通过浏览器调用Grpc服务,最主要是Grpc使用了Http/2传输而浏览器不允许调用方需要使用 HTTP/2,或提供对基础 HTTP/2 框架的访问 但是官方也提供了曲线救国的方式,gRPC Web是 gRPC 团队提供有限的 gRPC 支持在浏览器中的其他技术(引用官方文档)。   话不多说,咱们直接先上两个官方链接,   //grpc.io/docs/   //docs.microsoft.com/zh-cn/aspnet/core/grpc/?view=aspnetcore-3.0     和HttpApi有啥区别,如下图     看的出来微软对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)     一、创建项目   两种方式,都可以   1、通过命令一键生成基于Grpc模板的项目   dotnet new grpc         2、通过传统方式创建       创建好的项目长这样     我们一定会注意到 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里定义的方法     一顿操作猛如虎     代码相对简单直接截图,最后直接上结果,咱们一看就懂 客户端执行结果   服务端输出   在3.0版本之前,要使用Grpc微服务,proto文件需要先生成好CS类文件,生成CS类文件还是比较费事儿的.然后把生成好的CS类文件引用到项目中才可以。其实在开发中我们并不需要关心这些,只是由于.net 跨平台来的稍稍晚一点,慢慢的这些脚手架类的东西会越来越完善 可以看出微软也预见了这些事,在.net core 3.0提供了类似自动化的支持。
转载自://www.cnblogs.com/DanielYao/p/11394243.html