ApiLoadBalancingMng_RESTful.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using Sers.Core.Module.Api.RouteMap;
  2. using Sers.Core.Module.Rpc;
  3. using Sers.ServiceCenter.Entity;
  4. using Vit.Extensions;
  5. namespace Sers.Gover.Base
  6. {
  7. /// <summary>
  8. /// 当前可调用的ApiService
  9. /// </summary>
  10. public class ApiLoadBalancingMng_RESTful: ApiLoadBalancingMng
  11. {
  12. /// <summary>
  13. /// 如 "GET"
  14. /// </summary>
  15. /// <param name="apiNode"></param>
  16. /// <returns></returns>
  17. static string GetHttpMethod(ApiNode apiNode)
  18. {
  19. var method = apiNode.apiDesc?.HttpMethodGet()?.ToUpper();
  20. if (string.IsNullOrEmpty(method)) method = "_";
  21. return method;
  22. }
  23. /// <summary>
  24. /// 通过负载均衡算法 获取可调用的ApiNode
  25. /// </summary>
  26. /// <param name="rpcData"></param>
  27. /// <param name="routeType"></param>
  28. /// <returns></returns>
  29. public override ApiNode GetCurApiNodeByLoadBalancing(IRpcContextData rpcData, out ERouteType routeType)
  30. {
  31. var method= rpcData.http_method_Get()?.ToUpper();
  32. if (string.IsNullOrEmpty(method)) method = "_";
  33. var oriRoute = rpcData.route;
  34. #region 去除query string(url ?后面的字符串)
  35. //{
  36. // // b2?a=c
  37. // var index = oriRoute.IndexOf('?');
  38. // if (index >= 0)
  39. // {
  40. // oriRoute = oriRoute.Substring(0, index);
  41. // }
  42. //}
  43. #endregion
  44. var route = "/"+method + oriRoute;
  45. var lb = routeMap.Routing(route, out routeType);
  46. if (lb != null)
  47. {
  48. return lb.GetCurApiNodeBalancing();
  49. }
  50. route = "/_" + oriRoute;
  51. lb = routeMap.Routing(route, out routeType);
  52. if (lb != null)
  53. {
  54. return lb.GetCurApiNodeBalancing();
  55. }
  56. return null;
  57. }
  58. protected override string GetApiRoute(ApiNode apiNode)
  59. {
  60. var route= "/"+GetHttpMethod(apiNode) + apiNode.apiDesc.route;
  61. return route;
  62. }
  63. }
  64. }