static void Main(string[] args) { Console.WriteLine("Please input enter to begin."); Console.ReadLine(); Console.InputEncoding = Encoding.UTF8; Console.OutputEncoding = Encoding.UTF8; //配置客户端日志工厂 LoggerManager.ClientLoggerFactory.AddConsole(LogLevel.Error); //加载配置文件 string path = Path.Combine(Directory.GetCurrentDirectory(), "config.json"); var configRoot = new ConfigurationBuilder() .AddJsonFile(path) .Build(); var clientConfig = configRoot.GetClientConfig(); var serviceProxyManager = new ServiceProxyManager(); //创建Autofac容器并注册服务类型 var container = GetAutofacContainer(serviceProxyManager); //配置服务发现 var zookeeperConfig = configRoot.GetZookeeperConfig(); var zookeeperClientConfig = configRoot.GetZookeeperClientConfig(); var serializerList = new List <ISerializer>() { new MsgPackSerializer(LoggerManager.ClientLoggerFactory), new ProtoBufSerializer(LoggerManager.ClientLoggerFactory) }; var serviceProxyFactory = ServiceProxyCreator.CreateDefaultServiceProxyFactory(null); var nodeClientFactory = NodeClientManager.CreateDefaultNodeClientFactory(zookeeperClientConfig, serializerList, LoggerManager.ClientLoggerFactory); var serviceSubscriber = new ServiceSubscriber(zookeeperConfig, LoggerManager.ClientLoggerFactory, new ServiceProxyCreator(LoggerManager.ClientLoggerFactory, serviceProxyFactory, zookeeperClientConfig.Services), new NodeClientManager(LoggerManager.ClientLoggerFactory, nodeClientFactory)) .Subscribe(container.GetNodeServiceProxyTypes()) .RegistTo(serviceProxyManager); try { //连接服务 serviceProxyManager.ConnectAsync().Wait(); } catch (AggregateException ex) { foreach (var e in ex.InnerExceptions) { if (e is NetworkException netEx) { Console.WriteLine($"Connect has net error. Host={netEx.Host}, Port={netEx.Port}, Message={netEx.Message}"); } else { throw e; } } } try { //调用服务 var sampleService = container.Resolve <ISampleService>(); var result = sampleService.Welcome("XNode"); Console.WriteLine(result); } catch (RequestTimeoutExcption ex) { Console.WriteLine($"Timeout: RequestId={ex.Request.Id}"); } catch (ServiceCallException ex) { Console.WriteLine($"Service call exception: ExceptionId={ex.ExceptionId}, ExceptionMessage={ex.Message}"); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } Console.ReadLine(); //关闭服务订阅 serviceSubscriber.Dispose(); //关闭服务连接 serviceProxyManager.CloseAsync().Wait(); //关闭DotNetty事件循环 BootstrapManager.Disable(); }
private static IServiceProxyManager InitWithZookeeper(string host, int port, string localHost, int?localPort) { string path = Path.Combine(Directory.GetCurrentDirectory(), "config_service_discovery_zookeeper.json"); var configRoot = new ConfigurationBuilder() .AddJsonFile(path) .Build(); var clientConfig = configRoot.GetClientConfig(); LoggerManager.ClientLoggerFactory.AddConsole(LogLevel.Information); var serviceProxyTypeList = new List <Type>() { typeof(ICustomerService), typeof(OrderService) }; var serializerList = new List <ISerializer>() { new MsgPackSerializer(LoggerManager.ClientLoggerFactory), new ProtoBufSerializer(LoggerManager.ClientLoggerFactory) }; var serviceCaller = new ServiceCallerBuilder() .UseDefault() .Build(); var serviceProxyManager = new ServiceProxyManager(); var zookeeperConfig = configRoot.GetZookeeperConfig(); var zookeeperClientConfig = configRoot.GetZookeeperClientConfig(); var builder = new ContainerBuilder(); builder.Register(c => new ServiceProxyInterceptor(serviceProxyManager)); builder.RegisterType <CustomerService>() .As <ICustomerService>() .EnableInterfaceInterceptors() //接口拦截 .InterceptedBy(typeof(ServiceProxyInterceptor)) .SingleInstance(); builder.RegisterType <OrderService>() //.As<IOrderService>() .EnableClassInterceptors() //类拦截 .InterceptedBy(typeof(ServiceProxyInterceptor)) .SingleInstance(); container = builder.Build(); var serviceProxyFactory = ServiceProxyCreator.CreateDefaultServiceProxyFactory(serviceCaller); var nodeClientFactory = NodeClientManager.CreateDefaultNodeClientFactory(zookeeperClientConfig, serializerList, LoggerManager.ClientLoggerFactory); serviceSubscriber = new ServiceSubscriber(zookeeperConfig, LoggerManager.ClientLoggerFactory, new ServiceProxyCreator(LoggerManager.ClientLoggerFactory, serviceProxyFactory, zookeeperClientConfig.Services), new NodeClientManager(LoggerManager.ClientLoggerFactory, nodeClientFactory)) .Subscribe(container.GetNodeServiceProxyTypes()) .RegistTo(serviceProxyManager); serviceProxyManager.ConnectAsync().Wait(); return(serviceProxyManager); }