Example #1
0
        static void Main(string[] args)
        {
            var builder = new ConfigurationBuilder()
                          .SetBasePath(Directory.GetCurrentDirectory())
                          .AddJsonFile("appsettings.json")
                          .AddEnvironmentVariables();

            Configuration = builder.Build();

            var loggerFactory = new LoggerFactory()
                                .AddConsole()
                                .AddDebug();

            ILogger logger = loggerFactory.CreateLogger <Program>();

            var port = int.Parse(Configuration["service:port"]);

            var brokerList = Configuration["kafkaclient:brokerlist"];
            var config     = new Dictionary <string, object>
            {
                { "group.id", "order-command" },
                { "enable.auto.commit", "false" },
                { "bootstrap.servers", brokerList }
            };

            IEventEmitter kafkaEmitter = new KafkaEventEmitter(config, loggerFactory.CreateLogger <KafkaEventEmitter>());
            // TODO: this channel needs to use a service-discovery hostname
            var orderChannel = new Channel($"{Configuration["orderclient:hostname"]}:{Configuration["orderclient:port"]}",
                                           ChannelCredentials.Insecure);
            var inventoryChannel = new Channel($"{Configuration["inventoryclient:hostname"]}:{Configuration["inventoryclient:port"]}",
                                               ChannelCredentials.Insecure);

            logger.LogInformation($"Configured gRPC channel for Order Management client: {orderChannel.ResolvedTarget}");
            logger.LogInformation($"Configured gRPC channel for Inventory Management client: {inventoryChannel.ResolvedTarget}");

            var orderClient     = new OrderManagement.OrderManagementClient(orderChannel);
            var inventoryClient = new InventoryManagement.InventoryManagementClient(inventoryChannel);

            var refImpl = new ReflectionServiceImpl(
                ServerReflection.Descriptor, OrderCommand.Descriptor);

            var rpcLogger = loggerFactory.CreateLogger <OrderCommandImpl>();
            var server    = new Server
            {
                Services = { OrderCommand.BindService(new OrderCommandImpl(rpcLogger, kafkaEmitter, orderClient, inventoryClient)),
                             ServerReflection.BindService(refImpl) },
                Ports = { new ServerPort("localhost", port, ServerCredentials.Insecure) }
            };

            server.Start();

            logger.LogInformation("Orders Command gRPC Service Listening on Port " + port);

            // Keep the process alive without consuming CPU cycles
            mre.WaitOne();
        }
Example #2
0
        public OrdersController(OrderManagement.OrderManagementClient client,
                                OrderCommand.OrderCommandClient orderCommandClient,
                                ILogger <OrdersController> logger) : base()
        {
            this.orderManagementClient = client;
            this.orderCommandClient    = orderCommandClient;
            this.logger = logger;

            logger.LogInformation("Created Orders Controller");
        }
Example #3
0
 public OrderCommandImpl(
     ILogger logger,
     IEventEmitter emitter,
     OrderManagement.OrderManagementClient orderManagementClient,
     InventoryManagement.InventoryManagementClient inventoryManagementClient)
 {
     this.logger                    = logger;
     this.eventEmitter              = emitter;
     this.orderManagementClient     = orderManagementClient;
     this.inventoryManagementClient = inventoryManagementClient;
 }
Example #4
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            Channel channel = new Channel("127.0.0.1:3000", ChannelCredentials.Insecure);
            var     client  = new OrderCommand.OrderCommandClient(channel);

            Channel invChannel = new Channel("127.0.0.1:3002", ChannelCredentials.Insecure);
            var     invClient  = new InventoryManagement.InventoryManagementClient(invChannel);

            Channel orderChannel = new Channel("127.0.0.1:3001", ChannelCredentials.Insecure);
            var     orderClient  = new OrderManagement.OrderManagementClient(orderChannel);

            services.AddSingleton(typeof(OrderCommand.OrderCommandClient), client);
            services.AddSingleton(typeof(InventoryManagement.InventoryManagementClient), invClient);
            services.AddSingleton(typeof(OrderManagement.OrderManagementClient), orderClient);

            services.AddMvc();
        }
Example #5
0
        static void Main(string[] args)
        {
            var builder = new ConfigurationBuilder()
                          .SetBasePath(Directory.GetCurrentDirectory())
                          .AddJsonFile("appsettings.json")
                          .AddEnvironmentVariables();

            Configuration = builder.Build();

            ILoggerFactory loggerFactory = new LoggerFactory()
                                           .AddConsole()
                                           .AddDebug();

            ILogger logger = loggerFactory.CreateLogger <Program>();

            var port = int.Parse(Configuration["service:port"]);

            IEventEmitter kafkaEmitter = new KafkaEventEmitter();
            // TODO: this channel needs to use a service-discovery hostname
            Channel orderChannel = new Channel($"{Configuration["orderclient:hostname"]}:{Configuration["orderclient:port"]}",
                                               ChannelCredentials.Insecure);

            logger.LogInformation($"Configured gRPC channel for Order Management client: {orderChannel.ResolvedTarget}");
            var orderClient = new OrderManagement.OrderManagementClient(orderChannel);

            Server server = new Server
            {
                Services = { OrderCommand.BindService(new OrderCommandImpl(kafkaEmitter, orderClient)) },
                Ports    = { new ServerPort("localhost", port, ServerCredentials.Insecure) }
            };

            server.Start();

            logger.LogInformation("Orders Command RPC Service Listening on Port " + port);

            // Keep the process alive without consuming CPU cycles
            mre.WaitOne();
        }
Example #6
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            Console.WriteLine("CONFIGURE SERVICES CALLED");
            // TODO: make these channels DNS-disco-friendly
            Channel cmdChannel = new Channel(Configuration["rpcclient:ordercommand"], ChannelCredentials.Insecure);
            var     client     = new OrderCommand.OrderCommandClient(cmdChannel);

            Channel invChannel = new Channel(Configuration["rpcclient:inventory"], ChannelCredentials.Insecure);
            var     invClient  = new InventoryManagement.InventoryManagementClient(invChannel);

            Channel orderChannel = new Channel(Configuration["rpcclient:ordermanagement"], ChannelCredentials.Insecure);
            var     orderClient  = new OrderManagement.OrderManagementClient(orderChannel);

            logger.LogInformation($"Order Command Client: {cmdChannel.ResolvedTarget}");
            logger.LogInformation($"Order Management Client: {orderChannel.ResolvedTarget}");
            logger.LogInformation($"Inventory Client: {invChannel.ResolvedTarget}");

            services.AddSingleton(typeof(OrderCommand.OrderCommandClient), client);
            services.AddSingleton(typeof(InventoryManagement.InventoryManagementClient), invClient);
            services.AddSingleton(typeof(OrderManagement.OrderManagementClient), orderClient);

            services.AddMvc();
        }
Example #7
0
        static void Main(string[] args)
        {
            const int Port = 3000;

            IEventEmitter kafkaEmitter = new KafkaEventEmitter();
            Channel       orderChannel = new Channel("127.0.0.1:3001", ChannelCredentials.Insecure);
            var           orderClient  = new OrderManagement.OrderManagementClient(orderChannel);

            Server server = new Server
            {
                Services = { OrderCommand.BindService(new OrderCommandImpl(kafkaEmitter, orderClient)) },
                Ports    = { new ServerPort("localhost", Port, ServerCredentials.Insecure) }
            };

            server.Start();

            Console.WriteLine("Orders Command RPC Service Listening on Port " + Port);
            Console.WriteLine("Press any key to stop");

            Console.ReadKey();

            server.ShutdownAsync().Wait();
        }
 public OrderCommandImpl(IEventEmitter emitter, OrderManagement.OrderManagementClient orderManagementClient)
 {
     eventEmitter = emitter;
     this.orderManagementClient = orderManagementClient;
 }