public LoadBalancerRoute GetLoadBalancerRoute(LoadBalancerRequestConfig requestConfig)
        {
            if (requestConfig == null || requestConfig.RouteChains.IsNullOrEmpty())
            {
                return(null);
            }

            var routeMap = _routeMap;

            for (int i = 0; i < requestConfig.RouteChains.Length; i++)
            {
                LoadBalancerRouteConfig routeConfig = requestConfig.RouteChains[i];
                if (!string.IsNullOrWhiteSpace(routeConfig.RouteId))
                {
                    LoadBalancerRoute route;
                    if (routeMap.TryGetValue(routeConfig.RouteId, out route))
                    {
                        var e = new SeekRouteEventArgs(route);
                        RaiseSeekRouteEvent(e);
                        return(e.Route);
                    }
                }
                if (!routeConfig.AllowFallback)
                {
                    return(null);
                }
            }
            return(null);
        }
        private void RaiseSeekRouteEvent(SeekRouteEventArgs e)
        {
            if (OnSeekRoute == null)
            {
                return;
            }

            try
            {
                OnSeekRoute(this, e);
            }
            catch (Exception ex)
            {
                _logger.Warn("Error occurred while raising SeekRouteEvent.", ex, _loadBalancerContext.AdditionalInfo);
            }
        }