Ejemplo n.º 1
0
        public async Task ProcessOrderAsync(ProcessOrderCommand processOrderCommand)
        {
            var commandHandlerSuccess = await orderCommandHandler.HandleAsync(processOrderCommand);

            var orderProcessedEvent = new OrderProcessedEvent(processOrderCommand.Order);

            orderProcessedEvent.Success = true;

            if (!commandHandlerSuccess)
            {
                orderProcessedEvent.Success = false;
            }

            await bus.EnqueueAsync(orderProcessedEvent, OrderProcessedEvent.EventQueueName);
        }
Ejemplo n.º 2
0
        public Task Handle(OrderReceivedEvent message, IMessageHandlerContext context)
        {
            var format = "{Application}.{Service}.{Operation}-{TransactionId}: {LogMessage}";

            // simulate long running process
            Thread.Sleep(TimeSpan.FromSeconds(5));
            Console.WriteLine($"Step 2: Received OrderReceivedEvent {message.TransactionId}");
            //log.Info($"Step 2: Received OrderReceivedEvent {message.TransactionId}");


            var logMessage = $"Step 2: Received OrderReceivedEvent {message.TransactionId}";

            try
            {
                log.InfoFormat(format, "Lhi.NsbDemo.Orders", "OrderReceivedCommandHandler", "Handle-OrderProcessedEvent", message.TransactionId, logMessage);
            }
            catch { }

            _promCounter.Labels(Environment.MachineName, "received").Inc();

            //TODO: resolving backend platform and process the order
            var result = "succeeded";//happy scenario

            count++;
            // fail on every 3rd order received
            if (count == 3)
            {
                result = "failed";
                count  = 0;
            }
            // Send process result back to the Saga
            var orderProcessedEvent = new OrderProcessedEvent
            {
                TransactionId = message.TransactionId,
                Results       = result
            };

            try
            {
                context.Publish(orderProcessedEvent);
            }
            catch (Exception ex)
            {
                var errorMessage = $"Could not publish OrderProcessedEvent. Error: {ex.Message}";
                log.ErrorFormat(format, "Lhi.NsbDemo.Orders", "OrderReceivedCommandHandler", "Handle-OrderProcessedEvent", message.TransactionId, errorMessage);
            }
            return(Task.CompletedTask);
        }
Ejemplo n.º 3
0
        public async Task ProcessOrderAsync(ProcessOrderCommand processOrderCommand)
        {
            var commandHandlerSuccess = await _orderCommandHandler.HandleAsync(processOrderCommand);

            var orderProcessedEvent = new OrderProcessedEvent(processOrderCommand.Order);

            orderProcessedEvent.Success = true;

            if (!commandHandlerSuccess)
            {
                Console.WriteLine("Falha no tratamento da mensagem");
                orderProcessedEvent.Success = false;
            }

            await _bus.EnqueueAsync(orderProcessedEvent, OrderProcessedEvent.EventQueueName);
        }
Ejemplo n.º 4
0
        public Task Handle(OrderProcessedEvent message, IMessageHandlerContext context)
        {
            // handle response
            Console.WriteLine($"Step 3: Order {message.TransactionId} has been process with results: {message.Results}");
            //log.Info($"Step 3: Order {message.TransactionId} has been process with results: {message.Results}");

            var format     = "{Application}.{Service}.{Operation}-{TransactionId}: {LogMessage}";
            var logMessage = $"Step 3: Order {message.TransactionId} has been process with results: {message.Results}";

            try
            {
                log.InfoFormat(format, "Lhi.NsbDemo.Orders", "OrdersSaga", "Handle-OrderProcessedEvent", message.TransactionId, logMessage);
            }
            catch { }

            _promCounter.Labels(Environment.MachineName, "processed").Inc();

            // if order processing failed, send a notification command
            if (message.Results == "failed")
            {
                var sendNotificationCommand = new SendNotificationCommand
                {
                    TransactionId = message.TransactionId,
                    Message       = $"Order {message.TransactionId} could not be procceeded. Please try again!"
                };

                try
                {
                    context.Send(sendNotificationCommand);
                }
                catch (Exception ex)
                {
                    var errorMessage = $"Could not send SendNotificationCommand. Error: {ex.Message}";
                    log.ErrorFormat(format, "Lhi.NsbDemo.Orders", "OrdersSaga", "Handle-OrderProcessedEvent", message.TransactionId, errorMessage);
                }
            }

            return(Task.CompletedTask);
        }