public async Task GetRouteFor()

in rocketmq-client-csharp/Client.cs [220:267]


        public async Task<TopicRouteData> GetRouteFor(string topic, bool direct)
        {
            if (!direct && _topicRouteTable.ContainsKey(topic))
            {
                return _topicRouteTable[topic];
            }

            // We got one or more name servers available.
            var request = new rmq::QueryRouteRequest();
            request.Topic = new rmq::Resource();
            request.Topic.ResourceNamespace = _resourceNamespace;
            request.Topic.Name = topic;
            request.Endpoints = new rmq::Endpoints();
            request.Endpoints.Scheme = AccessPointScheme;
            foreach (var address in AccessPointEndpoints)
            {
                request.Endpoints.Addresses.Add(address);
            }

            var metadata = new grpc.Metadata();
            Signature.sign(this, metadata);
            int index = _random.Next(0, AccessPointEndpoints.Count);
            var serviceEndpoint = AccessPointEndpoints[index];
            // AccessPointAddresses.Count
            string target = $"https://{serviceEndpoint.Host}:{serviceEndpoint.Port}";
            TopicRouteData topicRouteData;
            try
            {
                Logger.Debug($"Resolving route for topic={topic}");
                topicRouteData = await Manager.ResolveRoute(target, metadata, request, RequestTimeout);
                if (null != topicRouteData)
                {
                    Logger.Debug($"Got route entries for {topic} from name server");
                    _topicRouteTable.TryAdd(topic, topicRouteData);
                    return topicRouteData;
                }
                else
                {
                    Logger.Warn($"Failed to query route of {topic} from {target}");
                }
            }
            catch (Exception e)
            {
                Logger.Warn(e, "Failed when querying route");
            }

            return null;
        }