.NetCore框架Surging系列(一)介绍
.NetCore框架Surging系列(二)HTTP
.NetCore框架Surging系列(三)HTTP本地路由发现过程

.NetCore框架Surging系列(三)HTTP本地路由发现过程

发现过程

  1. 初始化
    ServiceHostModule.Initialize 提供入口
  2. 获取API接口类列表
  3. 建立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);
}
  1. entry获取
    // DefaultServiceEntryLocate
    // ->DefaultServiceEntryManager
    // ->AttributeServiceEntryProvider.GetALLEntries()
  2. 判断是否由实现方法
    根据entry中对应ServiceKey(命名空间.类名.方法名)和Entry的Type(API声明接口类),找到对应的实现方法服务,能找到则执行本地

总结

个人觉得当前这种以方法级别(每个API分配一个ID)的方式不是好,在路由注册和路由发现的时候(下一篇分析Rpc路由注册和路由发现),把问题复杂化,在接入层Nginx转发,以及用Prometheus等都有不小的挑战,后面逐步分析以及调整方案。

.NetCore框架Surging系列(三)HTTP本地路由发现过程相关推荐

  1. .NetCore框架Surging系列(六)路由发现

    .NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 .NetCore框架Sur ...

  2. .NetCore框架Surging系列(四)RPC客户端过程

    .NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 .NetCore框架Sur ...

  3. .NetCore框架Surging系列(九)性能提升-1

    .NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 .NetCore框架Sur ...

  4. .NetCore框架Surging系列(八)性能评估

    .NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 .NetCore框架Sur ...

  5. .NetCore框架Surging系列(一)介绍

    .NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 这里写自定义目录标题 Su ...

  6. .NetCore框架Surging系列(二)HTTP

    .NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 Surging系列(二)H ...

  7. GoWeb开发_Iris框架讲解(三):路由功能处理方式

    Context概念 Context是iris框架中的一个路由上下文对象,在iris框架中的源码路径定义为:{$goPath}\github.com\kataras\iris\context\conte ...

  8. vue源码分析系列三:render的执行过程和Virtual DOM的产生

    render 手写 render 函数,仔细观察下面这段代码,试想一下这里的 createElement 参数是什么 . new Vue({el: '#application',render(crea ...

  9. [Cocos Creator] 本地文件加载系列六:本地龙骨动画dragonbones加载(web模式)

    [Cocos Creator] 本地文件加载系列一:本地文件读取(web模式) [Cocos Creator] 本地文件加载系列二:本地音频文件播放(web模式) [Cocos Creator] 本地 ...

最新文章

  1. WCF RIA Service中 POCO实体含有复杂类型怎么处理?
  2. 使用JDBC获取Oracle连接时报错
  3. flutter项目内配置代理
  4. mysql5.5.8编译安装_MySQL5.5.8源代码编译安装
  5. 引用js实现checkbox批量选中
  6. mysql my includedir_MySQL:读取my.cnf的顺序问题
  7. 【空间】C++内存管理
  8. 用js实现的对css的一些操作方法
  9. 详细解说“黑客”们热衷的热门抓鸡技术
  10. 使用BCDboot工具,修复windows 系统启动,双启动菜单丢失故障
  11. [裴礼文数学分析中的典型问题与方法习题参考解答]4.3.22
  12. 开源、私有化部署,这款知识管理系统还有多少惊喜是我们不知道的
  13. 什么是驱动程序 在计算机中有何用途,电脑的驱动程序有什么作用
  14. java软件视频教程下载 百度云盘_2018最新java夜校视频教程
  15. win7用友u8安装教程_win7安装用友U8教程详解
  16. 后端返回amr格式音频前端处理播放播放(个人笔迹)
  17. 案例:客户满意度的综合统计分析
  18. TCP/IP协议族(第4版)
  19. DSS代码解读-main(十一)
  20. 02 AE脚本开发使用什么编辑器

热门文章

  1. LSM6DSL之SPI驱动
  2. 可视化训练工具---allegroai/trains
  3. Cannot currently show the desktop[已解决]
  4. pytorch 实现径向基函数网络(RBF Network)
  5. VisualBasic的历史
  6. ff7重制版青魔法_《最终幻想7重制版》敌方招式获取方式与效果
  7. 35岁只是普通程序员,还有救吗?答案扎心了,老铁!
  8. MalformedURLException:no protocol
  9. 每日一笑--蛛丝马迹
  10. 蜗牛圈圈-时尚智能的运动计时App