微服务框架
中台调用组件封装
完成不同组件间的通信, HttpClient封装,
inteface IMiddleService{
MiddleResult Get(string url,IDictionary<string,object> param);
MiddleResult Put(string url,IDictionary<string,object> param);
MiddleResult Delete(string url,IDictionary<string,object> param);
MiddleResult Post(string url,IDictionary<string,object> param);
}
class MiddleResult{
public string ReturnCode{set;get;}
public string ErrorInfo{set;get;}
public IDictionary<string,object> ResultDic{set;get;}
public IList< IDictionary<string,object>> ResultList{set;get;}
public dynamic Result{set;get;}
}
断路器Polly组件封装
超时-》重试-》熔断-》降级
注册中心组件封装
解耦具体微服务的调用,微服务可动态伸缩
Consul grpc,webapi 调用
- 注册服务接口
- 发现服务接口
- IHostedService
- 服务名称,Scheme
负载均衡组件封装
inteface IloadBalance
{
ServiceNode Select(Ilist<ServiceNode > nodes);
}
class AbstractLoadBalance:IloadBalance
{
ServiceNode Select(Ilist<ServiceNode > nodes);
ServiceNode DoSelect(Ilist<ServiceNode > nodes);
}
最合适: 最少活跃数算法。
动态中台调用组件封装
inteface IDynamiceMiddleService
{
List<T> GetList<T>(string urlScheme,string serviceName,string serviceLink,IDictionary<string,object> param) where T:new();
void Post(string urlScheme,string serviceName,string serviceLink,IDictionary<string,object> param);
void Delete(string urlScheme,string serviceName,string serviceLink,IDictionary<string,object> param);
}
inteface IDynamiceMiddelUrl
{
string GetMiddleUrl(string urlScheme,string serviceName);
}
微服务客户端组件封装
约定大于配置
[MicroClient("https","OrderServices")]
inteface IOrderClient
{
[PostPath("Orders")]
Order CreateOrder(Order order);
}
动态代理,程序集扫描注册
每个微服务有不同的领域模型,所以需要不同的客户端完成相应业务
框架异常组件封装
解决异常 定位问题
class FrameException :Exception
{
}