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);
        }
Beispiel #2
0
 /// <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));
 }