public async Task <ServiceRoute> Locate(string serviceId, bool fromCache = true) { if (fromCache && _concurrent.TryGetValue(serviceId, out ServiceRoute route) && route.Address.Any()) { return(route); } route = await _serviceRouteManager.GetRouteByServiceIdAsync(serviceId, fromCache); if (route == null) { _logger.LogWarning($"根据服务id:{serviceId},找不到相关服务信息。【fromCache:{fromCache}】"); } if (route != null) { _concurrent.AddOrUpdate(serviceId, route, (k, v) => route); foreach (var httpMethod in route.ServiceDescriptor.HttpMethod()) { _serviceRoutes.AddOrUpdate(new Tuple <string, string>(route.ServiceDescriptor.RoutePath, httpMethod), route, (k, v) => route); } } return(route); }
/// <summary> /// 根据服务Id获取一个服务路由。 /// </summary> /// <param name="serviceRouteManager">服务路由管理者。</param> /// <param name="serviceId">服务Id。</param> /// <returns>服务路由。</returns> public static async Task <ServiceRoute> GetAsync(this IServiceRouteManager serviceRouteManager, string serviceId) { return(await serviceRouteManager.GetRouteByServiceIdAsync(serviceId)); }