Exemple #1
0
        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);
        }
Exemple #2
0
        //[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);
        }
Exemple #3
0
        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());
        }
Exemple #4
0
        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));
            }
        }