个体做外贸的网站,ftp服务器搭建设置网站信息,指数运算公式大全,设计师在线接单继之前的《Asp.Net Core Docker 搭建》文章末尾说过的#xff0c;将陆续编写基于asp.net core 打造一个内部服务治理的rpc框架。不过前端时间较忙#xff0c;所以搁置了一段时间。闲话不多说#xff0c;下面就来讲讲为什么需要去做一个该框架#xff0c;以及想法的来源和设… 继之前的《Asp.Net Core Docker 搭建》文章末尾说过的将陆续编写基于asp.net core 打造一个内部服务治理的rpc框架。不过前端时间较忙所以搁置了一段时间。闲话不多说下面就来讲讲为什么需要去做一个该框架以及想法的来源和设计思路。一、产生背景 公司技术栈是以微软栈为主。整个平台的业务并不是特别复杂。因此先前搭建每个子系统的时候都是以最简单的方式入手时间较紧。但是随着时间的推移各个子系统之间的交互也是越来越多当然我们的做法也是很简单就是通过暴露rest api 然后客户端通过http调用进行交互以至于现在很多系统都会配置其他系统的调用信息。日积月累感觉系统越来月凌乱有洁癖遇到这种乱就必须要去重构^_^当然也是为后面维护减少成本于是就产生了编写一个内部服务调用的框架。二、想法来源 本着遇到问题解决问题的目的最开始也想直接使用开源的系统如:sugring,orleans等.net 界非常著名的项目。但考虑到我的需求很简单以及我的想法也是做一个非常简单尽量不依赖其他重量级的框架开发人员都认真阅读代码后都能轻易维护的东西)且对上述的框架目前应用到生产环境的案例不是很知晓的情况下于是还是忍痛割爱最终放弃了。在这里我想表达我的目标就是我需要像dubbo一样调用方只需要引用服务提供者定义的相关接口库.Net 中定义的接口eg:IUserService就能直接调用。服务的调用方和提供方都注册到一个统一的注册中心我以consul为注册中心无需安装其他运行时非常方便。这样就不需要关心服务的具体地方。(该实现方式的想法在我今天(2018-12-16)看到的doteasy.rpc中的文章和我的想法几乎一致但是我的实现还是略有不同它是基于pb进行传输实现的我是完全基于asp.net core 中的webapi进行实现)。三、设计思路 其实asp.net core 已经是一个完善且高效的rpc框架我们在调用每一个实现的web api实际就是一个rpc调用只是它是基于http协议大多数情况下数据是通过json序列化和反序列化而已。其他开源的优秀框架eg:surgin,oreans,dubbo...实现了自己高效的通信方式以及协议)。所以基于asp.net core来实现其实就是基于它来扩展并且满足大多数公司的业务需求的性能要求应该不是问题(何况我们的spring boot实现微服务也是走rest方式^_^)。下面是我的整个想法构思图。图 1 场景比如我有一个Service A的集群,依赖了Service B集群(可运行多个Service B的进程实例)的一个接口(IUserService当然该接口在Service B中进行了实现UserService)进行数据获取或操作。就可以通过启动每个Service B实例时就将Service B要提供的服务发布出来(或叫导出)注册到Consul注册集群中同样,Service A的实例也需要注册到注册中心(即使不发布供其他服务调用的接口)。此时Service A要调用Service B的服务首先通过HttpServiceProxyFactory服务代理类生成IUserSerivice的代理实现类UserSeriviceImpl通过Emit进行动态代理再从注册中心获取到Service B的集群信息根据一定的负载算法(负载是客户端进行负载实现目前只实现了简单的循环负载)选择一个Service B的实例进行远程调用。其中UserSeriviceImpl代理实现类中核心的代码就是通过HttpClient进行数据的包装然后请求到Service B中的UserService(其实就是一个Controller)实现类中。然后在解析UserService处理后返回过来的数据。 以上就是我整个Rpc调用的总体思路。具体每个模块的详细设计与实现接下来我会继续写出来有兴趣的朋友可以留言交流也可以加qq:418237014交流。 原文地址: https://www.jianshu.com/p/c45f56d2aa21.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com