之前的文章已经介绍过如何使用HttpClusterApi进行去中心化的HTTP集群服务访问,这一章主要详细讲述如何使用HttpClusterApi,主要包括如果定义节点,创建服务接口和如果使用接口描述不同情况下的WebApi服务。最后简单地通过HttpClusterApi来调用百度的一些云服务接口。
介绍
通过名称大概也能了解它的功能,通过它可以描述和调用不同的webapi服务应用;它提供了不同Url对应不同服务绑定和创建接口代理调用功能,从而让使用者通过接口的方式即可完成webapi的调用并不像传统WebHttpRequest或HttpClient那样编写大量繁琐的基础代码。
方法
组件提供了以下方法来添加服务地址
//设置url对应节点的host信息,默认权重是10,权重值可以根据自己实际情况来配置HttpClusterApi AddHost(string url, string host, int weight = 10) //设置url对应节点的host信息,默认权重是10HttpClusterApi AddHost(string url, params string[] host) //设置url对应的节点信息HttpClusterApi SetNode(string url, IApiNode node)
Url参数是一个正则表达式,用于匹配请求的url;当url值为*的时候该host是最低级匹配项,当没有任何匹配host的情况下才使用'*'对应的host.
INodeSourceHandler NodeSourceHandler { get; set; }在之前的文章已经有所介绍,是用于自定义集群信息源,通过这个属性可以绑定集群信息来源,这样使用者就可以通过数据库,缓存或第方服务来加载集群负载信息.
public T Create<T>()方法是创建一个接口代理,通过代理操作即可实现具体的HTTP请求,组件对接口的定义具有一定的限制性,虽然不用继承某些基础接口,但要通过一些组件提供的Attribute定义在方法或参数上.
public ClusterStats Stats()方法获取统计信息,可以得到每个url对应不同host的调用情况统计.
线程安全问题
HttpClusterApi是一个线程安全类,定义后可以在任意线程中同时使用;由于内部使用连接池的方式进行请求,所以并不用担心数据访问冲突的情况出现.Create<T>返回的代理对象也是线程安全的,所以只需要创建一个接口实例接口即可随意调用.
接口定义
组件通过接口的方式来进行请求处理,所以并不需要编写任何基础的HTTP通讯代码,为了达到实际应用的需要,组件提供一些Attribute来代替基础代码的编写.下面介绍一些这些Attribute的作用.
请求描述
组件暂只支持GET,POST,PUT,DELETE这几种请求描述,这些属性只能标记在接口方法上,用于描述方法指向那种请求方式.Route属性用于描述请求的路径,默认是根路径并使用方法名称作为URL
[AttributeUsage(AttributeTargets.Method)] public class GetAttribute : Attribute { public string Route { get; set; } } [AttributeUsage(AttributeTargets.Method)] public class

