private object GetStub(ThriftyRequest request, ChannelKey key, INiftyClientChannel channel) { var method = request.Method; var service = method.DeclaringType; var client = _thriftClientManager.CreateClient(channel, service, $"{service.Name }{key}", _swiftyClientOptions.EventHandlers); request.Stub = client; request.ChannelKey = key; return(client); }
//[DebuggerHidden] private object Call(MethodInfo method, ClientSslConfig sslConfig, Ribbon.Server server, string version, string vipAddress, object[] args) { var request = new ThriftyRequest(_swiftyClientOptions.RetryEnabled, _swiftyClientOptions.RetriesNextServer, _swiftyClientOptions.RetriesSameServer, _swiftyClientOptions.ReadTimeoutMilliseconds, _swiftyClientOptions.WriteTimeoutMilliseconds, _swiftyClientOptions.ReceiveTimeoutMilliseconds, _swiftyClientOptions.ConnectTimeoutMilliseconds, args, method); var response = RibbonCall(request, sslConfig, server, version, vipAddress); return(response.Payload); }
private ThriftyResponse RibbonCall(ThriftyRequest request, ClientSslConfig sslConfig, Ribbon.Server server, string version, string vipAddress) { if (server != null) { return(Execute(request, server, sslConfig)); } var command = GetCommand(new LoadBalanceKey(version, vipAddress)); if (command == null) { throw new ThriftyException("need config Eureka"); } return(command.Submit(s => { var result = Execute(request, s, sslConfig); return Task.FromResult(result); }).GetAwaiter().GetResult()); }
private ThriftyResponse Execute(ThriftyRequest request, Ribbon.Server server, ClientSslConfig sslConfig) { var func = _methodCache.GetOrAdd(request.Method, CreateFunc); _logger.LogDebug(new EventId(0, "ThriftyClient"), $"use {server}"); var discoveryEnabledServer = server as DiscoveryEnabledServer; var host = discoveryEnabledServer == null ? server.Host : discoveryEnabledServer.InstanceInfo.IpAddr; var port = discoveryEnabledServer?.Port ?? server.Port; var address = string.Compare("localhost", host, StringComparison.OrdinalIgnoreCase) == 0 ? IPAddress.Loopback : IPAddress.Parse(host); var key = new ChannelKey(new IPEndPoint(address, port), sslConfig, request.ConnectTimeout, request.ReveiveTimeout, request.WriteTimeout, request.ReadTimeout); using (var channel = new PooledClientChannel(this._channelPools, key)) { var proxy = GetStub(request, key, channel); var result = func(proxy, request.Args); return(new ThriftyResponse(result, true)); } }