コード例 #1
0
ファイル: ThriftyClient.cs プロジェクト: ysj123688/Thrifty
        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));
            }
        }
コード例 #2
0
 public static T Create(ThriftyClient client, Ribbon.Server server, string version, string vipAddress, ClientSslConfig sslConfig) => Creator(client, sslConfig, server, version, vipAddress);
コード例 #3
0
 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);
コード例 #4
0
ファイル: ThriftyClient.cs プロジェクト: ysj123688/Thrifty
        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());
        }