Esempio n. 1
0
        /// <summary>
        /// Create status service
        /// </summary>
        /// <param name="clientConfiguration"></param>
        /// <param name="invoker"></param>
        /// <returns></returns>
        private IStatusService CreateStatusService(GrpcClientConfiguration clientConfiguration, CallInvoker invoker)
        {
            // get build method
            var methodBuild = typeof(GrpcClientFactoryUtil).
                              GetMethod(nameof(GrpcClientFactoryUtil.Create), BindingFlags.Static | BindingFlags.NonPublic).MakeGenericMethod(typeof(IStatusService));

            // create status service with custom invoker
            var statusService = (IStatusService)methodBuild.Invoke(null, new object[] { invoker, clientConfiguration });

            // return
            return(statusService);
        }
 /// <summary>
 /// Build client
 /// </summary>
 /// <typeparam name="TService"></typeparam>
 /// <param name="invoker"></param>
 /// <param name="configuration"></param>
 /// <returns></returns>
 internal static TService Create <TService>(CallInvoker invoker, GrpcClientConfiguration configuration)
     where TService : class
 {
     // protofiles generated client
     if (typeof(TService).GetInheritanceHierarchy().Any(t => t == typeof(ClientBase)))
     {
         return(CreateProtoClient <TService>(invoker, configuration.Name));
     }
     else
     { // internally build client from interface
         return(CreateInterfaceClient <TService>(invoker, configuration.Name));
     }
 }
Esempio n. 3
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="logger"></param>
        /// <param name="clientConfiguration"></param>
        /// <param name="connectionInfoList"></param>
        /// <param name="channelCustomSelector"></param>
        public ManagedCallInvoker(ILogger logger, GrpcClientConfiguration clientConfiguration,
                                  List <GrpcChannelConnectionData> connectionInfoList, Func <object, string, string, string> channelCustomSelector = null)
        {
            // set properteis
            _configuration         = clientConfiguration;
            _logger                = logger;
            _channelCustomSelector = channelCustomSelector;

            // create invoke bundles
            Invokers = connectionInfoList.Select(options => {
                var ch     = new Channel(options.Url, options.Port, ChannelCredentials.Insecure);
                var inv    = new DefaultCallInvoker(ch);
                var bundle = new InvokerBundle(ch, inv, options);
                return(bundle);
            }).ToList();

            // setup round robin
            _roundRobin = new RoundRobinPolicy <InvokerBundle>(Invokers, GetScore);
        }
Esempio n. 4
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="clientConfiguration"></param>
        /// <param name="serviceProvider"></param>
        internal GrpcClientManager(GrpcClientConfiguration clientConfiguration, IServiceProvider serviceProvider)
        {
            // save cofniguration
            _clientConfiguration = clientConfiguration;

            // create call invoker
            var logger = serviceProvider.GetService <ILoggerFactory>()?.CreateLogger("GrpcClientRequests");

            _callInvoker = new ManagedCallInvoker(logger, clientConfiguration,
                                                  _clientConfiguration.Hosts, StatusServiceChannelCustomSelector);

            // create status service client if required
            if (_clientConfiguration.Options.StatusServiceEnabled)
            {
                _statusService = CreateStatusService(clientConfiguration, _callInvoker);
            }

            // reset channels
            ResetChannels();

            // run monitor
            RunMonitor();
        }