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); }
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(); }
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 })); }
// 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) )); }
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(); }
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(); }
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(); }