Exemple #1
0
        private static void Main(string[] args)
        {
            var  port = -1;
            bool?gzip = null;

            if (args.Length > 0)
            {
                int.TryParse(args[0], out port);
            }
            var protocol = ServiceProtocol.Tcp;
            var codec    = ServiceCodec.Json;

            if (args.Length > 1)
            {
                protocol = args[1].CastTo(ServiceProtocol.Tcp);
            }
            if (args.Length > 2)
            {
                codec = args[2].CastTo(ServiceCodec.Json);
            }
            if (args.Length > 3)
            {
                gzip = args[3].CastTo(false);
            }

            //ConfigHelper.Instance.UseLocal("_config");

            Console.WriteLine("shay".Config <string>());

            var services = new MicroBuilder();

            services.AddLogging(builder =>
            {
                builder.SetMinimumLevel(LogLevel.Information);
                builder.AddFilter("System", level => level >= LogLevel.Warning);
                builder.AddFilter("Microsoft", level => level >= LogLevel.Warning);
                builder.AddConsole();
            });

            services
            .AddMicroService(builder =>
            {
                switch (codec)
                {
                case ServiceCodec.Json:
                    builder.AddJsonCodec();
                    break;

                case ServiceCodec.MessagePack:
                    builder.AddMessagePackCodec();
                    break;

                case ServiceCodec.ProtoBuf:
                    builder.AddProtoBufCodec();
                    break;
                }

                builder
                .AddSession()
                //.AddNacos()
                //.AddConsul()
                .AddDefaultRouter();
                ;

                switch (protocol)
                {
                case ServiceProtocol.Tcp:
                    builder.AddTcpProtocol();
                    break;

                case ServiceProtocol.Http:
                    builder.AddHttpProtocol();
                    break;

                case ServiceProtocol.Ws:
                    builder.AddWebSocketProtocol();
                    break;

                case ServiceProtocol.Grpc:
                    builder.AddGrpcProtocol();
                    break;
                }
            })
            .AddMicroClient(builder =>
            {
                //支持多编解码&多协议
                builder
                .AddJsonCodec()
                .AddMessagePackCodec()
                .AddProtoBufCodec()
                .AddHttpProtocol()
                .AddTcpProtocol()
                .AddWebSocketProtocol()
                .AddGrpcProtocol()
                .AddSession()
                .AddDefaultRouter()
                //.AddConsul("http://192.168.0.231:8500")
                ;
            });
            services.AddSingleton <ITestContract, TestService>();
            services.AddScoped <AccountService>();

            _provider = services.BuildServiceProvider();
            //_provider.UseNacosConfig();

            _provider.UseMicroService(address =>
            {
                var m = "micro".Config <ServiceAddress>();
                if (m == null)
                {
                    return;
                }
                address.Service = m.Service;
                address.Host    = m.Host;
                address.Port    = port > 80 ? port : m.Port;
                if (address.Port < 80)
                {
                    address.Port = 5000;
                }
                address.Weight = m.Weight;
                address.Gzip   = gzip ?? m.Gzip;
            });
            AppDomain.CurrentDomain.ProcessExit += async(sender, eventArgs) => await Shutdown();

            Console.CancelKeyPress += async(sender, eventArgs) =>
            {
                await Shutdown();

                eventArgs.Cancel = true;
            };
            var proxy    = _provider.GetService <IProxyFactory>();
            var contract = proxy.Create <ITestContract>();
            var result   = contract.Get("shay");

            Console.WriteLine(result.Result);
            while (true)
            {
                var cmd = Console.ReadLine();
                if (cmd == "exit")
                {
                    break;
                }
            }
        }