一般应用服务都会部署到多台服务器之上,一、可以通过硬件得到更多的并发处理能力;二、可以避免单点太故障的出现,从而确保服务7X24有效运作。当访问这些HTTP服务的情况一般都是经过反向代理服务进行统一处理,这样的好处就访问透明化,统一管理和控制。但存在的问题就是服务处理延时加大,还有就是对小团或公司来说可能没有专门的技术人来规划和管理这些代理服务。接下一来讲一下在.net core下更轻更的一种处理方案,这种方案通过Client自身的功能实现集群化的HTTP服务访问,通过故障迁移和权重分配达到一个无中心化灵活的HTTP集群服务访问(通过它还能访问所有非.net core的HTTP服务)
场景定义
首先有以下一个asp.net core mvc服务
public class HomeController : Controller { [HttpPost] public int EmployeeAdd([FromBody]List<Employee> items) { return items == null ? 0 : items.Count; } [HttpPost] public Employee EmployeeEdit(int id, [FromBody]Employee emp) { Employee record = DataHelper.Employees.Find(e => e.EmployeeID == id); if (record != null) { record.City = emp.City; record.Address = emp.Address; record.Title = emp.Title; record.HomePhone = emp.HomePhone; return record; } return null; } public object EmployeesGetName() { return from e in DataHelper.Employees select new { ID = e.EmployeeID, Name = e.FirstName + " " + e.LastName }; } public object Customers(int count) { List<Customer> result = new List<Customer>(); if (count > DataHelper.Customers.Count) count = DataHelper.Customers.Count; for (int i = 0; i < count; i++) { result.Add(DataHelper.Customers[i]); } return result; } public object CustomersGetName() { return from c in DataHelper.Customers select new { ID = c.CustomerID, Name = c.CompanyName }; } }
代码简化了一下,正常API的服务都部署在多台服务器构建应用集群,一般情况都是通过nginx或其他反向代理服务器接管Client的请求,然后针对负载配置进行转发处理。但接下来需要讲解的是通过开源组件实现无中心化的集群负载调用。
引用组件
首先net core的http client组件并不具这一功能,所以需要引用第三方的一个开源组件BeetleX(组件暂只支持net core 2.1或更高版本) 
定义访问接口
组件支持通过接口的方式来描述HTTP接口服务,接口的访问方式对使用和维护都具有着极大的便利性,以下是针对以上服务描述的接口
[JsonFormater] [Controller(BaseUrl = "Home
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

