コード例 #1
0
        private static Server GenerateServerInstance()
        {
            PrintLogAndConsole("Initialize gRPC server ...");

            ILoggerFactory           loggerFactory      = new LoggerFactory().AddConsole();
            var                      serviceName        = "MockSite.DomainService";
            Tracer                   tracer             = TracingHelper.InitTracer(serviceName, loggerFactory);
            ServerTracingInterceptor tracingInterceptor = new ServerTracingInterceptor(tracer);

            var host = AppSettingsHelper.Instance.GetValueFromKey(HostNameConst.TestKey);
            var port = Convert.ToInt32(AppSettingsHelper.Instance.GetValueFromKey(PortConst.TestKey));

            var server = new Server
            {
                Ports =
                {
                    new ServerPort(host, port, ServerCredentials.Insecure)
                }
            };

            Console.WriteLine($"Greeter server listening on host:{host} and port:{port}");

            server.Services.Add(
                Message.UserService.BindService(
                    new UserServiceImpl(ContainerHelper.Instance.Container.Resolve <IUserService>())).Intercept(tracingInterceptor));
            return(server);
        }
コード例 #2
0
        public static void Main(string[] args)
        {
            using ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
            using Tracer tracer = Tracing.Init("client", loggerFactory);
            // using OpenTracing.Contrib.Grpc.Interceptors;
            ServerTracingInterceptor tracingInterceptor = new ServerTracingInterceptor(tracer);

            Channel channel = new Channel("127.0.0.1:50051", ChannelCredentials.Insecure);

            // using Grpc.Core.Interceptors;
            //var client = new Greeter.GreeterClient(channel);
            var client = new Greeter.GreeterClient(channel.Intercept(tracingInterceptor));
            // if we want to use the same traced channel for multiple clients, it's better to just get one instance.
            //CallInvoker callInvoker = channel.Intercept(tracingInterceptor);
            //var client = new Greeter.GreeterClient(callInvoker);

            String user = "******";

            var reply = client.SayHello(new HelloRequest {
                Name = user
            });

            Console.WriteLine("Greeting: " + reply.Message);

            channel.ShutdownAsync().Wait();
            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
コード例 #3
0
        static object StartServer(string host, int port, ICartStore cartStore)
        {
            // Run the server in a separate thread and make the main thread busy waiting.
            // The busy wait is because when we run in a container, we can't use techniques such as waiting on user input (Console.Readline())
            Task serverTask = Task.Run(async() =>
            {
                try
                {
                    await cartStore.InitializeAsync();

                    // setup grpc interceptor
                    var tracingInterceptor = new ServerTracingInterceptor(GlobalTracer.Instance);

                    Console.WriteLine($"Trying to start a grpc server at  {host}:{port}");
                    Server server = new Server
                    {
                        Services =
                        {
                            // Cart Service Endpoint
                            Hipstershop.CartService.BindService(new CartServiceImpl(cartStore)).Intercept(tracingInterceptor),

                            // Health Endpoint
                            Grpc.Health.V1.Health.BindService(new HealthImpl(cartStore)).Intercept(tracingInterceptor),
                        },
                        Ports = { new ServerPort(host, port, ServerCredentials.Insecure) }
                    };

                    Console.WriteLine($"Cart server is listening at {host}:{port}");
                    server.Start();

                    Console.WriteLine("Initialization completed");

                    // Keep the server up and running
                    while (true)
                    {
                        Thread.Sleep(TimeSpan.FromMinutes(10));
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
            });

            return(Task.WaitAny(new[] { serverTask }));
        }
コード例 #4
0
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            ILoggerFactory           loggerFactory      = new LoggerFactory().AddConsole();
            var                      serviceName        = "gRPC.ServerOnASP.NETCore";
            Tracer                   tracer             = TracingHelper.InitTracer(serviceName, loggerFactory);
            ServerTracingInterceptor tracingInterceptor = new ServerTracingInterceptor(tracer);

            var host = "127.0.0.1";
            var port = 50051;

            services.AddSingleton <gRPCService.gRPCServiceBase, gRPCServiceImpl>();

            var Services = services.BuildServiceProvider();

            services.AddSingleton(
                new gRPCServer(host, port,
                               gRPCService.BindService(Services.GetRequiredService <gRPCService.gRPCServiceBase>()).Intercept(tracingInterceptor)
                               ));
        }
コード例 #5
0
        public static async Task Main(string[] args)
        {
            ILoggerFactory           loggerFactory      = new LoggerFactory().AddConsole();
            Tracer                   tracer             = TracingHelper.InitTracer("server", loggerFactory);
            ServerTracingInterceptor tracingInterceptor = new ServerTracingInterceptor(tracer);


            Grpc.Core.Server serverInstance = new Grpc.Core.Server
            {
                Services = { gRPCService.BindService(new gRPCServiceImpl()).Intercept(tracingInterceptor) },
                Ports    = { new ServerPort(Server, Port, ServerCredentials.Insecure) }
            };

            serverInstance.Start();

            Console.WriteLine($"Greeter server listening on server {Server} and port {Port}");
            Console.WriteLine("Press any key to stop the server...");
            Console.ReadKey();

            await serverInstance.ShutdownAsync();
        }
コード例 #6
0
        public static void Main(string[] args)
        {
            using ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
            using Tracer tracer = Tracing.Init("server", loggerFactory);
            // using OpenTracing.Contrib.Grpc.Interceptors;
            ServerTracingInterceptor tracingInterceptor = new ServerTracingInterceptor(tracer);

            Server server = new Server
            {
                // using Grpc.Core.Interceptors;
                //Services = { Greeter.BindService(new GreeterImpl()) },
                Services = { Greeter.BindService(new GreeterImpl()).Intercept(tracingInterceptor) },
                Ports    = { new ServerPort("localhost", Port, ServerCredentials.Insecure) }
            };

            server.Start();

            Console.WriteLine("Greeter server listening on port " + Port);
            Console.WriteLine("Press any key to stop the server...");
            Console.ReadKey();

            server.ShutdownAsync().Wait();
        }
コード例 #7
0
        public static async Task Main(string[] args)
        {
            InitialConsulConfig();

            var builder = new HostBuilder()
                          .ConfigureHostConfiguration(configHost => { configHost.AddEnvironmentVariables("ASPNETCORE_"); }
                                                      )
                          .ConfigureAppConfiguration((hostingContext, config) =>
            {
                config.AddEnvironmentVariables();
                config.AddJsonFile("appsettings.json", true);
                config.AddJsonFile(
                    $"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json",
                    true
                    );

                if (args != null)
                {
                    config.AddCommandLine(args);
                }

                var appConfig    = config.Build();
                var consulIp     = appConfig[ConsulConfigConst.ConsulIp];
                var consulPort   = appConfig[ConsulConfigConst.ConsulPort];
                var consulModule = appConfig[ConsulConfigConst.ConsulModule];

                // 從 consul kv store 取得 config
                var configProvider = ConfigHelper.GetConfig(
                    $"http://{consulIp}:{consulPort}/v1/kv/",
                    consulModule.Split(','));

                // 將 config 塞入 application 中
                IConfiguration configFromConsul = new ConfigurationBuilder()
                                                  .AddJsonFile(configProvider, "none.json", false, false)
                                                  .Build();
                config.AddConfiguration(configFromConsul);
            })
                          .ConfigureServices((hostContext, services) =>
            {
                var configInstance = new ConfigurationBuilder()
                                     .SetBasePath(Directory.GetCurrentDirectory())
                                     .AddJsonFile("serilogsettings.json")
                                     .Build();

                var loggerCreator = new LoggerConfiguration()
                                    .ReadFrom.Configuration(configInstance);
                if (hostContext.HostingEnvironment.IsDevelopment())
                {
                    loggerCreator.WriteTo.Console();
                }

                Log.Logger = loggerCreator
                             .CreateLogger();

                services.AddOptions();
                services.AddSingleton <ILoggerFactory>(a => new SerilogLoggerFactory(Log.Logger));
                services.AddSingleton <UserService.UserServiceBase, UserServiceImpl>();
                services.AddSingleton <IUserService, MockSite.Core.Services.UserService>();
                services.AddSingleton <IRepository, UserRepository>();
                services.AddSingleton <IMongoRepository, MongoUserRepository>();
                services.AddSingleton <IRedisRepository, RedisUserRepository>();
                services.AddSingleton <Common.Data.Utilities.RedisConnectHelper>();

                const string serviceName = "MockSite.DomainService";
                var serviceProvider      = services.BuildServiceProvider();
                var logger             = serviceProvider.GetRequiredService <ILogger <Program> >();
                var loggerFactory      = serviceProvider.GetRequiredService <ILoggerFactory>();
                var tracer             = TracingHelper.InitTracer(serviceName, loggerFactory);
                var tracingInterceptor = new ServerTracingInterceptor(tracer);
                var host = hostContext.Configuration.GetSection(HostNameConst.TestKey).Value;
                var port = Convert.ToInt32(hostContext.Configuration.GetSection(PortConst.TestKey).Value);

                logger.Info($"Initialize gRPC Server on  host:{host} and port:{port} ...");

                services.AddSingleton(
                    new GrpcServer(host, port,
                                   UserService.BindService(
                                       serviceProvider.GetRequiredService <UserService.UserServiceBase>())
                                   .Intercept(tracingInterceptor)
                                   ));

                logger.Info($"gRPC Server ready to listening on {host}:{port}");
            })
            ;

            await builder.RunConsoleAsync();
        }