相信微服务大家伙都有听说和知道, 好处弊端咱也不多说了, Grpc 算是一个比较全面的微服务框架, 也得到微软的支持
总结下来就是, 跨平台, 可靠, 通信快, 扩展性强, 网络消耗小, 模板多语言通用
光说好处, 没有弊端吗, 自然是有的
最大的问题可能就是无法直接通过浏览器调用 Grpc 服务, 最主要是 Grpc 使用了 Http/2 传输而浏览器不允许调用方需要使用 HTTP/2, 或提供对基础 HTTP/2 框架的访问
但是官方也提供了曲线救国的方式, gRPC web 是 gRPC 团队提供有限的 gRPC 支持在浏览器中的其他技术 (引用官方文档).
话不多说, 咱们直接先上两个官方链接,
https://grpc.io/docs/
和 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 提供了类似自动化的支持.
来源: https://www.cnblogs.com/DanielYao/p/11394243.html