示例#1
0
文件: Startup.cs 项目: zmk523/jimu
 public Startup(IConfiguration configuration, Stack <Func <RequestDel, RequestDel> > middlewares, IServiceEntryContainer serviceEntryContainer, ILogger logger, ISerializer serializer, ITypeConvertProvider typeConvert)
 {
     Configuration          = configuration;
     _middlewares           = middlewares;
     _serviceEntryContainer = serviceEntryContainer;
     _logger      = logger;
     _serializer  = serializer;
     _typeConvert = typeConvert;
 }
示例#2
0
 public HttpMiddleware(RequestDelegate next, Stack <Func <RequestDel, RequestDel> > middlewares, IServiceEntryContainer serviceEntryContainer, ILogger logger, ISerializer serializer, ITypeConvertProvider typeConvert)
 {
     _next                  = next;
     _middlewares           = middlewares;
     _serviceEntryContainer = serviceEntryContainer;
     _logger                = logger;
     _serializer            = serializer;
     _typeConvert           = typeConvert;
 }
示例#3
0
 public ServiceEntryContainer(IContainer container, IServiceIdGenerator serviceIdGenerate, ITypeConvertProvider typeConvertProvider, ISerializer serializer, ILogger logger)
 {
     _container           = container;
     _services            = new List <ServiceEntry>();
     _handler             = new ConcurrentDictionary <Tuple <Type, string>, FastExecutor.FastExecutorHandler>();
     _serializer          = serializer;
     _logger              = logger;
     _serviceIdGenerate   = serviceIdGenerate;
     _typeConvertProvider = typeConvertProvider;
 }
示例#4
0
文件: HttpServer.cs 项目: zmk523/jimu
 public HttpServer(string ip, int port, Action <IWebHostBuilder> builderAction, IServiceEntryContainer serviceEntryContainer, ILogger logger, ISerializer serializer, ITypeConvertProvider typeConvert)
 {
     _serviceEntryContainer = serviceEntryContainer;
     _ip            = ip;
     _port          = port;
     _logger        = logger;
     _serializer    = serializer;
     _middlewares   = new Stack <Func <RequestDel, RequestDel> >();
     _builderAction = builderAction;
     _typeConvert   = typeConvert;
 }
示例#5
0
 public ServiceEntryContainer(IContainer container, IServiceIdGenerator serviceIdGenerate,
                              ITypeConvertProvider typeConvertProvider)
 //public ServiceEntryContainer()
 {
     _serviceIdGenerate   = serviceIdGenerate;
     _container           = container;
     _typeConvertProvider = typeConvertProvider;
     _services            = new List <JimuServiceEntry>();
     _handler             = new ConcurrentDictionary <Tuple <Type, string>, FastInvoke.FastInvokeHandler>();
     new ConcurrentDictionary <Tuple <Type, string>, object>();
 }
示例#6
0
 public RemoteServiceCaller(IClientServiceDiscovery serviceDiscovery, IAddressSelector addressSelector,
                            ITransportClientFactory transportClientFactory, ITypeConvertProvider typeConvertProvider,
                            IServiceTokenGetter serviceTokenGetter, ILogger logger, int retryTimes = -1)
 {
     _serviceDiscovery       = serviceDiscovery;
     _addressSelector        = addressSelector;
     _transportClientFactory = transportClientFactory;
     _typeConvertProvider    = typeConvertProvider;
     _serviceTokenGetter     = serviceTokenGetter;
     _logger     = logger;
     _retryTimes = retryTimes;
 }
示例#7
0
 public RemoteServiceExecutor(IClientServiceDiscovery serviceDiscovery, IAddressSelector addressSelector,
                              IServiceTokenGetter serviceTokenGetter, ITransportClientFactory transportClientFactory,
                              ITypeConvertProvider typeConvertProvider, ILogger logger, ISerializer serializer,
                              IAuthorizationHandler authorizationHandler = null, ICache <string, List <ServerAddress> > cache = null, int retryTimes = -1)
 {
     _serviceDiscovery       = serviceDiscovery;
     _addressSelector        = addressSelector;
     _transportClientFactory = transportClientFactory;
     _typeConvertProvider    = typeConvertProvider;
     _serviceTokenGetter     = serviceTokenGetter;
     _authorizationHandler   = authorizationHandler;
     _cache      = cache;
     _logger     = logger;
     _retryTimes = retryTimes;
     _serializer = serializer;
 }
        public static IServiceHostClientBuilder UseInServerForDiscovery(this IServiceHostClientBuilder serviceHostBuilder, params ServerAddress[] address)
        {
            serviceHostBuilder.RegisterService(cb =>
            {
                cb.RegisterType <ClientServiceDiscovery>().As <IClientServiceDiscovery>().SingleInstance();
            });

            serviceHostBuilder.AddInitializer(container =>
            {
                IClientServiceDiscovery clientDiscovery = container.Resolve <IClientServiceDiscovery>();
                IRemoteServiceExecutor remoteExecutor   = container.Resolve <IRemoteServiceExecutor>();
                ISerializer serializer             = container.Resolve <ISerializer>();
                ITypeConvertProvider typeConverter = container.Resolve <ITypeConvertProvider>();
                ILogger logger   = container.Resolve <ILogger>();
                StringBuilder sb = new StringBuilder();

                foreach (ServerAddress addr in address)
                {
                    sb.AppendFormat(addr.Code + ",");
                    clientDiscovery.AddRoutesGetter(async() =>
                    {
                        RemoteCallBackData result = await remoteExecutor.InvokeAsync(new List <ServerAddress>()
                        {
                            addr
                        }, "Lamp.ServiceDiscovery.InServer.GetRoutesDescAsync".ToLower(), null, null);
                        if (result == null || result.HasError)
                        {
                            return(null);
                        }

                        List <ServiceRouteDesc> routesDesc = (List <ServiceRouteDesc>)typeConverter.Convert(result.Result, typeof(List <ServiceRouteDesc>));

                        ServerDesc server = new ServerDesc
                        {
                            ServerAddress     = addr,
                            ServiceDescriptor = new List <ServiceDesc>()
                        };
                        server.ServerAddress.IsHealth = true;

                        foreach (ServiceRouteDesc desc in routesDesc)
                        {
                            ServiceDesc item = (ServiceDesc)desc.ServiceDescriptor.Clone();
                            server.ServiceDescriptor.Add(item);
                        }

                        return(server);
                    });
                }
                if (sb.Length > 0)
                {
                    logger.Info($"[config]用服务端发现服务 {sb.ToString()}");
                }
            });

            serviceHostBuilder.AddRunner(container =>
            {
                ClientServiceDiscovery clientServiceDiscovery = (ClientServiceDiscovery)container.Resolve <IClientServiceDiscovery>();
                clientServiceDiscovery?.RunInInit().Wait();
            });

            return(serviceHostBuilder);
        }