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,一经查实,立即删除!

相关文章

Fraction Construction Problem(拓展欧几里德)

Fraction Construction Problem 思路 cd−efab\frac{c}{d} - \frac{e}{f} \frac{a}{b}dc​−fe​ba​ a<b&f<ba < b \& f < ba<b&f<b 1≤1,e≤410121 \leq 1, e \leq 4 \times10 ^{12}1≤1,e≤41012 当b 1时&#xff0c;一定无解。 gcd(a, b…

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

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

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

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

拉格朗日插值

拉格朗日插值 简要阐述 结论给定n1n 1n1个点最多可以得到一个nnn次多项式的表达式&#xff0c;并且f(x)∑i1nyi∏j∤ix−xjxi−yjf(x) \sum_{i 1} ^{n} y_i \prod\limits_{j \nmid i}\frac{x - x_j}{x_i - y_j}f(x)∑i1n​yi​j∤i∏​xi​−yj​x−xj​​我们随便往里带入…

A Story of One Country (Hard)(中途相遇法/启发式分裂)

A Story of One Country (Hard) https://www.luogu.com.cn/problem/solution/CF1181E2 首先考虑暴力的做法&#xff0c;就是每次排序然后寻找分割点&#xff0c;对分割点左右两边分治处理&#xff0c;但是这样的复杂度是 最坏情况下O(n2logn)O(n^2logn)O(n2logn) 然后我们考…

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

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

HDU 6750 Function(莫比乌斯反演)(2020百度之星初赛1)

Function 推式子 S(n)∑i1n∑d∣id[gcd(d,id)1]∑d1nd∑d∣i[gcd(d,id)1]∑d1nd∑i1nd[gcd(d,i)1]∑d1nd∑i1nd∑k∣gcd(d,i)μ(k)∑k1nμ(k)k∑d1nkd∑i1nk2dtk2d∑t1nnt∑k2∣tμ(k)ktk2∑k1nμ(k)k∑k2∣tnttk2itk2∑k1nμ(k)k∑i1nk2nik2iS(n) \sum_{i 1} ^{n} \sum_{d …

P5170 【模板】类欧几里得算法

P5170 【模板】类欧几里得算法 https://www.cnblogs.com/bztMinamoto/p/10334354.html 对于类欧几里得算法&#xff0c;本质上可以理解为一条直线下的整点个数&#xff0c;是一个矩形区域。 然后将整数部分提出&#xff0c;就可以使得这个直线斜率较小&#xff0c;那么我们就可…

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

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

矩阵快速幂各类题型总结(一般,共轭,1 * n, 矩阵简化)

Reading comprehension 这个不难找出递推式f[n]f[n−1]2f[n−2]1f[n] f[n - 1] 2f[n - 2] 1f[n]f[n−1]2f[n−2]1。 /*Author : lifehappy */ #pragma GCC optimize(2) #pragma GCC optimize(3) #include <bits/stdc.h>using namespace std;typedef long long ll;co…

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

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

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

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

P3355 骑士共存问题(网络流)

P3355 骑士共存问题 经典的最大独立集问题&#xff0c;最大独立集就是最小点覆盖的补集&#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;为支持…

自适应辛普森(算法简要 + 模板)

简述&#xff1a; 对于普通的二次函数有f(x)ax2bxcf(x) ax ^ 2 bx cf(x)ax2bxc&#xff0c;原函数F(x)ax33bx22cxF(x) \frac{a x^3}{3} \frac{bx ^2}{2} cxF(x)3ax3​2bx2​cx。 有 ⎰lrf(x)F(r)−F(l)a3(r−l)3b2(r−l)2c(r−l)(r−l)6(2a(l2r2lr)3b(lr)c)(r−l)6((al…

P3358 最长k可重区间集问题(网络流:串联思想)

P3358 最长k可重区间集问题 这是一个经典模型&#xff0c;给定n个开区间&#xff0c;选择一些区间使得每个位置被覆盖次数不超过k&#xff0c;并最大化选择的区间长度之和。 首先一个直接的想法就是每一个区间匹配了它所对应的点&#xff0c;但是我们要求选择一个区间就必须要…

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

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

2019年ICPC银川区域赛 Easy Problem(简单莫比乌斯函数 + 欧拉降幂)

Easy Problem ∑a11m∑a21m∑a31m⋯∑an−1m∑anm[gcd(a1,a2,a3,…,an−1,an)d](a1,a2,a3,…,an−1,an)kdkd∑a11md∑a21md∑a31md⋯∑an−1md∑anmd[gcd(a1,a2,a3,…,an−1,an)1](a1,a2,a3,…,an−1,an)kdkd∑i1mdikdμ(i)∑a11mid∑a21mid∑a31mid⋯∑an−11mid∑an1mid(∏j1…

P3357 最长k可重线段集问题(网络流/串联/拆点)

P3357 最长k可重线段集问题 对于n条开线段&#xff0c;选择一个子集使得任意xp和子集相交的直线个数小于等于k&#xff0c;并使得选择的线段长度之和最大。 这道题看上去和区间集没有什么区别&#xff0c;只是费用发生变化&#xff0c;但是要注意一个特殊情况&#xff0c;那就…