Example #1
0
        public static void Main(string[] args)
        {
            var basePath      = Path.Combine(Directory.GetCurrentDirectory(), "Configs");
            var configBuilder = new ConfigurationBuilder();
            var conf          = configBuilder.SetBasePath(basePath).AddJsonFile("appsettings.json", false, true).Build();

            var innerLogger = new Grpc.Core.Logging.LogLevelFilterLogger(new Grpc.Core.Logging.ConsoleLogger(), Grpc.Core.Logging.LogLevel.Debug);

            GrpcEnvironment.SetLogger(innerLogger);

            //使用依赖注入
            var services = new ServiceCollection()
                           .AddGrpcMiddleware4Client()
                                                                                                                                                  // .AddSingleton<ClientInterceptor>(new ClientCallTimeout(10)) // 注入客户端中间件
                           .AddGrpcClient <Greeter.GreeterClient>(conf.GetSection("services:remotes:GreeterServer").Get <RemoteServiceOption>()); // 注入grpc client
            var provider = services.BuildServiceProvider();

            //从容器获取client
            var client = provider.GetService <Greeter.GreeterClient>();
            var user   = "******";

            for (int i = 0; i < 10; i++)
            {
                var reply = client.SayHello(new HelloRequest {
                    Name = user + i.ToString()
                });
                Console.WriteLine($"Greeting{i.ToString()}: {reply.Message}");
            }

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
        public Task StartAsync(CancellationToken cancellationToken)
        {
            //构建Server
            var serverBuilder = new ServerBuilder();
            var serverOptions = _conf.GetSection("services:GreeterServer").Get <LocalServiceOption>();

            _server = serverBuilder.UseGrpcOptions(serverOptions)
                      .UseInterceptor(_serverInterceptors) //使用中间件
                      .UseGrpcService(Greeter.BindService(new GreeterImpl()))
                      .UseLogger(log =>                    //使用日志
            {
                log.LoggerMonitor = info => Console.WriteLine(info);
                log.LoggerError   = exception => Console.WriteLine(exception);
            })
                      .Build();

            var innerLogger = new Grpc.Core.Logging.LogLevelFilterLogger(new Grpc.Core.Logging.ConsoleLogger(), Grpc.Core.Logging.LogLevel.Debug);

            GrpcEnvironment.SetLogger(innerLogger);

            _server.UseDashBoard()      //使用DashBoard,需要使用FM.GrpcDashboard网站
            .StartAndRegisterService(); //启动服务并注册到consul

            return(Task.CompletedTask);
        }