温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

.NET Core微服务中的调用方式REST和RPC是什么意思

发布时间:2022-01-04 18:42:29 来源:亿速云 阅读:274 作者:柒染 栏目:大数据

本篇文章为大家展示了.NET Core微服务中的调用方式REST和RPC是什么意思,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

一、REST or RPC ?

1.1 REST & RPC

  微服务之间的接口调用通常包含两个部分,序列化和通信协议。常见的序列化协议包括json、xml、hession、protobuf、thrift、text、bytes等;通信比较流行的是http、soap、websockect,RPC通常基于TCP实现,常用框架例如dubbo,netty、mina、thrift。

  REST:严格意义上说接口很规范,操作对象即为资源,对资源的四种操作(post、get、put、delete),并且参数都放在URL上,但是不严格的说Http+json、Http+xml,常见的http api都可以称为Rest接口。

  RPC:即我们常说的远程过程调用,就是像调用本地方法一样调用远程方法,通信协议大多采用二进制方式。

1.2 HTTP vs 高性能二进制协议

  HTTP相对更规范,更标准,更通用,无论哪种语言都支持HTTP协议。如果你是对外开放API,例如开放平台,外部的编程语言多种多样,你无法拒绝对每种语言的支持,相应的,如果采用HTTP,无疑在你实现SDK之前,支持了所有语言,所以,现在开源中间件,基本最先支持的几个协议都包含RESTful。

  RPC协议性能要高的多,例如Protobuf、Thrift、Kyro等,(如果算上序列化)吞吐量大概能达到http的二倍。响应时间也更为出色。千万不要小看这点性能损耗,公认的,微服务做的比较好的,例如,netflix、阿里,曾经都传出过为了提升性能而合并服务。如果是交付型的项目,性能更为重要,因为你卖给客户往往靠的就是性能上微弱的优势。

  所以,最佳实践一般是对外REST,对内RPC,但是追求极致的性能会消耗很多额外的成本,所以一般情况下对内一般也REST,但对于个别性能要求较高的接口使用RPC。

二、案例结构

.NET Core微服务中的调用方式REST和RPC是什么意思

  这里假设有两个服务,一个ClinetService和一个PaymentService,其中PaymentService有两部分,一部分是基于REST风格的WebApi部分,它主要是负责一些对性能没有要求的查询服务,另一部分是基于TCP的RPC Server,它主要是负责一些对性能要求高的服务,比如支付和支出等涉及到钱的接口。假设User在消费ClientService时需要调用PaymentService根据客户账户获取Payment History(走REST)以及进行交易事务操作(走RPC)。

三、REST调用

3.1 一个好用的REST Client : WebApiClient

  使用过Java Feign Client的人都知道,一个好的声明式REST客户端可以帮我们省不少力。在.NET下,园子里的大大老九就写了一款类似于Feign Client的REST Client:WebApiClient。WebApiClient是开源在github上的一个httpClient客户端库,内部基于HttpClient开发,是一个只需要定义C#接口(interface),并打上相关特性,即可异步调用http-api的框架 ,支持.net framework4.5+、netcoreapp2.0和netstandard2.0。它的GitHub地址是:https://github.com/dotnetcore/WebApiClient

  如何安装?

NuGet>Install-Package WebApiClient-JIT  

3.2 使用实例:走API Gateway

  Step1.定义HTTP接口

.NET Core微服务中的调用方式REST和RPC是什么意思

  这里需要注意的是,由于我们要走API网关,所以这里定义的HttpHost地址是一个假的,后面具体调用时会覆盖掉,但是这里必须写上一个,不然无法使用。

  Step2.在Controller中即可异步调用

.NET Core微服务中的调用方式REST和RPC是什么意思

  这里PaymentService的实现很简单,就是返回了一个String集合:

.NET Core微服务中的调用方式REST和RPC是什么意思

 最终调用结果如下:

  .NET Core微服务中的调用方式REST和RPC是什么意思

3.3 使用实例:直接访问具体服务

  在服务众多,且单个服务就部署了多个实例的情况下,我们可以通过API网关进行中转,但是当部分场景我们不需要通过API网关进行中转的时候,比如:性能要求较高,负载压力较小单个实例足够等,我们可以直接与要通信的服务进行联接,也就不用从API网关绕一圈。

  Step1.改一下HTTP接口:

.NET Core微服务中的调用方式REST和RPC是什么意思

  同理,这里的HttpHost也是后面需要被覆盖的,原因是我们将其配置到了配置文件中。

  Step2.改一下调用代码:

.NET Core微服务中的调用方式REST和RPC是什么意思

 最终调用结果如下:

  .NET Core微服务中的调用方式REST和RPC是什么意思

四、RPC调用

4.1 Thrift简介

  .NET Core微服务中的调用方式REST和RPC是什么意思

  Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Go,Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。

  当然,还有gRPC也可以选择,不过从网上的性能测试来看,Thrift性能应该优于gRPC 2倍以上,但是gRPC的文档方面要比Thrift友好很多。

4.2 Thrift的使用

  (1)下载Thrift (这里选择Windows版)

  .NET Core微服务中的调用方式REST和RPC是什么意思

  下载完成后解压,这里我将其改名为thrift.exe(去掉了版本号),一会在命令行敲起来更方便一点。

  (2)编写一个PaymentService.thrift,这是一个IDL中间语言

.NET Core微服务中的调用方式REST和RPC是什么意思

 (3)根据thrift语法规则生成C#代码

cmd>thrift.exe -gen csharp PaymentService.thrift

  .NET Core微服务中的调用方式REST和RPC是什么意思

  (4)创建一个Contracts类库项目,将生成的C#代码放进去

  .NET Core微服务中的调用方式REST和RPC是什么意思

4.3 增加RPC Server

  (1)新增一个控制台项目,作为我们的Payment Service RPC Server,并引用Contracts类库项目

  .NET Core微服务中的调用方式REST和RPC是什么意思

  (2)引入thrift-netcore包:

NuGet>Install-Package apache-thrift-netcore

  (3)加入一个新增的PaymentService实现类

.NET Core微服务中的调用方式REST和RPC是什么意思

  这里输出日志仅仅是为了测试。

  (4)编写启动RPC Server的主程序

.NET Core微服务中的调用方式REST和RPC是什么意思

  (5)如果是多个服务实现的话,也可以如下这样启动:

.NET Core微服务中的调用方式REST和RPC是什么意思

4.4 调用RPC

  在ClientService中也引入apache-thrift-netcore包,然后在调用的地方修改如下:

.NET Core微服务中的调用方式REST和RPC是什么意思

  最终测试结果如下:

  .NET Core微服务中的调用方式REST和RPC是什么意思

上述内容就是.NET Core微服务中的调用方式REST和RPC是什么意思,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI