.NetCore框架Surging系列(三)HTTP本地路由发现过程
.NetCore框架Surging系列(一)介绍
.NetCore框架Surging系列(二)HTTP
.NetCore框架Surging系列(三)HTTP本地路由发现过程
.NetCore框架Surging系列(三)HTTP本地路由发现过程
发现过程
- 初始化
ServiceHostModule.Initialize 提供入口 - 获取API接口类列表
- 建立API与实现的关联:Entry
使用
在http执行过程中,最终都会执行到HttpExecutor
,在这个类会判断当前调用是否是执行本地方法,还是执行远程方法。
var entry = _serviceEntryLocate.Locate(httpMessage);HttpResultMessage<object> httpResultMessage = new HttpResultMessage<object>() { };if (entry!=null && _serviceProvider.IsRegisteredWithKey(httpMessage.ServiceKey, entry.Type))
{//执行本地代码。httpResultMessage = await LocalExecuteAsync(entry, httpMessage);
}else
{httpResultMessage = await RemoteExecuteAsync(httpMessage);
}
- entry获取
// DefaultServiceEntryLocate
// ->DefaultServiceEntryManager
// ->AttributeServiceEntryProvider.GetALLEntries() - 判断是否由实现方法
根据entry中对应ServiceKey(命名空间.类名.方法名)和Entry的Type(API声明接口类),找到对应的实现方法服务,能找到则执行本地
总结
个人觉得当前这种以方法级别(每个API分配一个ID)的方式不是好,在路由注册和路由发现的时候(下一篇分析Rpc路由注册和路由发现),把问题复杂化,在接入层Nginx转发,以及用Prometheus等都有不小的挑战,后面逐步分析以及调整方案。
.NetCore框架Surging系列(三)HTTP本地路由发现过程相关推荐
- .NetCore框架Surging系列(六)路由发现
.NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 .NetCore框架Sur ...
- .NetCore框架Surging系列(四)RPC客户端过程
.NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 .NetCore框架Sur ...
- .NetCore框架Surging系列(九)性能提升-1
.NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 .NetCore框架Sur ...
- .NetCore框架Surging系列(八)性能评估
.NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 .NetCore框架Sur ...
- .NetCore框架Surging系列(一)介绍
.NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 这里写自定义目录标题 Su ...
- .NetCore框架Surging系列(二)HTTP
.NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 Surging系列(二)H ...
- GoWeb开发_Iris框架讲解(三):路由功能处理方式
Context概念 Context是iris框架中的一个路由上下文对象,在iris框架中的源码路径定义为:{$goPath}\github.com\kataras\iris\context\conte ...
- vue源码分析系列三:render的执行过程和Virtual DOM的产生
render 手写 render 函数,仔细观察下面这段代码,试想一下这里的 createElement 参数是什么 . new Vue({el: '#application',render(crea ...
- [Cocos Creator] 本地文件加载系列六:本地龙骨动画dragonbones加载(web模式)
[Cocos Creator] 本地文件加载系列一:本地文件读取(web模式) [Cocos Creator] 本地文件加载系列二:本地音频文件播放(web模式) [Cocos Creator] 本地 ...
最新文章
- WCF RIA Service中 POCO实体含有复杂类型怎么处理?
- 使用JDBC获取Oracle连接时报错
- flutter项目内配置代理
- mysql5.5.8编译安装_MySQL5.5.8源代码编译安装
- 引用js实现checkbox批量选中
- mysql my includedir_MySQL:读取my.cnf的顺序问题
- 【空间】C++内存管理
- 用js实现的对css的一些操作方法
- 详细解说“黑客”们热衷的热门抓鸡技术
- 使用BCDboot工具,修复windows 系统启动,双启动菜单丢失故障
- [裴礼文数学分析中的典型问题与方法习题参考解答]4.3.22
- 开源、私有化部署,这款知识管理系统还有多少惊喜是我们不知道的
- 什么是驱动程序 在计算机中有何用途,电脑的驱动程序有什么作用
- java软件视频教程下载 百度云盘_2018最新java夜校视频教程
- win7用友u8安装教程_win7安装用友U8教程详解
- 后端返回amr格式音频前端处理播放播放(个人笔迹)
- 案例:客户满意度的综合统计分析
- TCP/IP协议族(第4版)
- DSS代码解读-main(十一)
- 02 AE脚本开发使用什么编辑器