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)); } }
public static T Create(ThriftyClient client, Ribbon.Server server, string version, string vipAddress, ClientSslConfig sslConfig) => Creator(client, sslConfig, server, version, vipAddress);
private static object CrossCaller(ThriftyClient client, MethodBase info, ClientSslConfig sslConfig, Ribbon.Server server, string version, string vipAddress, object[] args) => client.Call(info as MethodInfo, sslConfig, server, version, vipAddress, args);
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()); }