.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等都有不小的挑战,后面逐步分析以及调整方案。