예제 #1
0
        public async Task <ActionResult> ProcessMessage()
        {
            var           consumerHelper   = new ConsumerWrapper(consumerconfig, "orderrequests");
            List <string> lstorderRequests = consumerHelper.testMessage();

            if (lstorderRequests.Any())
            {
                foreach (var orderRequest in lstorderRequests)
                {
                    //Deserilaize
                    OrderRequest order = JsonConvert.DeserializeObject <OrderRequest>(orderRequest);

                    //TODO:: Process Order
                    Console.WriteLine($"Info: OrderHandler => Processing the order for {order.productname}");
                    order.status = OrderStatus.COMPLETED;


                    //Write to ReadyToShip Queue

                    //var producerWrapper = new ProducerWrapper(producerConfig, "readytoship");
                    //await producerWrapper.writeMessage(JsonConvert.SerializeObject(order));
                }

                return(Ok(lstorderRequests));
            }
            return(Ok("No messages to process"));
        }
예제 #2
0
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            var consumerHelper = new ConsumerWrapper("libraryreservations", _config);

            _logger.LogInformation("The Service is running and waiting for reservations");
            while (!stoppingToken.IsCancellationRequested)
            {
                var order = consumerHelper.ReadMessage <ReservationMessage>();
                _logger.LogInformation($"Got a reservation for {order.For} for the items {order.Items}");

                var numberOfItems = order.Items.Split(',').Count();
                await Task.Delay(1000 *numberOfItems);

                if (numberOfItems % 2 == 0)
                {
                    await _httpService.MarkReservationAccepted(order);

                    _logger.LogInformation("\tApproved that order.");
                }
                else
                {
                    await _httpService.MarkReservationRejected(order);

                    _logger.LogWarning("\tRejected that one!");
                }
            }
        }
예제 #3
0
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            Console.WriteLine("OrderProcessing Service Started");

            while (!stoppingToken.IsCancellationRequested)
            {
                var    consumerHelper = new ConsumerWrapper(consumerConfig, "orderrequests");
                string orderRequest   = consumerHelper.ReadMessage();

                if (string.IsNullOrWhiteSpace(orderRequest))
                {
                    Console.WriteLine("No message available!");
                    return;
                }

                //Deserilaize
                OrderRequest order = JsonConvert.DeserializeObject <OrderRequest>(orderRequest);
                if (order == null)
                {
                    Console.WriteLine("Order details not available!");
                    return;
                }

                //TODO:: Process Order
                Console.WriteLine($"Info: OrderHandler => Processing the order for {order.productname}");
                order.status = OrderStatus.COMPLETED;

                //Write to ReadyToShip Queue

                var producerWrapper = new ProducerWrapper(producerConfig, "readytoship");
                await producerWrapper.WriteMessage(JsonConvert.SerializeObject(order));
            }
        }
예제 #4
0
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                foreach (var topic in _topics)
                {
                    var t = new Thread(async() =>
                    {
                        var consumerConfig = new ConsumerConfig();
                        _configuration.Bind("Kafka:ConsumerConfig", consumerConfig);
                        consumerConfig.GroupId         = "Elearning";
                        consumerConfig.AutoOffsetReset = AutoOffsetReset.Earliest;
                        using (var consumer = new ConsumerWrapper <Null, string>(consumerConfig, topic))
                        {
                            while (true)
                            {
                                try
                                {
                                    var message = consumer.ReadMessage();
                                    if (message == null)
                                    {
                                        continue;
                                    }

                                    var exam = JsonConvert.DeserializeObject <Examination>(message);


                                    var oldExam = (_examRepo.GetEntityByIdAsync(exam.ExamId).Result);



                                    if (oldExam == null)
                                    {
                                        continue;
                                    }
                                    Console.WriteLine(oldExam.ExamId);
                                    if (oldExam.Status != 1)
                                    {
                                        var c = await _examRepo.Update(exam);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    Console.WriteLine(ex);
                                }
                            }
                        }
                    });
                    t.Start();
                    await Task.Delay(3000, stoppingToken);

                    _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
                }
            }
        }
예제 #5
0
 private static ConsumerWithToken MapConsumerWithToken(ConsumerWrapper source)
 {
     return(new ConsumerWithToken
     {
         Id = source.Id,
         Name = source.Name,
         KeyType = Enum.GetName(source.KeyType),
         ValueType = Enum.GetName(source.ValueType),
         ExpiresAt = source.ExpiresAt,
         Owner = source.Owner,
         Token = source.Token
     });
 }
예제 #6
0
 private static Responses.Consumer MapConsumer(ConsumerWrapper source)
 {
     return(new Responses.Consumer
     {
         Id = source.Id,
         Name = source.Name,
         User = source.User,
         KeyType = Enum.GetName(source.KeyType),
         ValueType = Enum.GetName(source.ValueType),
         ExpiresAt = source.ExpiresAt,
         Owner = source.Owner
     });
 }
예제 #7
0
            protected override async Task ExecuteAsync(CancellationToken stoppingToken)
            {
                using (var scope = _serviceScopeFactory.CreateScope())
                {
                    var _paymentRepository = scope.ServiceProvider.GetRequiredService <IPaymentRepository>();

                    await ConsumerWrapper.Consume(_consumerConfig, stoppingToken, "handle-payment-error", async (cr) =>
                    {
                        var entity = JsonConvert.DeserializeObject <PaymentSagaEntity>(cr.Message.Value);
                        await _paymentRepository.DeletePayment(entity.paymentId);
                    });
                }
            }
예제 #8
0
        public async Task <ActionResult> ProcessMessage()
        {
            var           consumerHelper   = new ConsumerWrapper(consumerconfig, "orderrequests");
            List <string> lstorderRequests = consumerHelper.readAllMessages();

            if (lstorderRequests.Any())
            {
                foreach (var orderRequest in lstorderRequests)
                {
                    //TODOprocess the order
                }

                return(Ok(lstorderRequests));
            }
            return(Ok("No messages to process"));
        }
예제 #9
0
        static void Main(string[] args)
        {
            ConsumerWrapper consumerWrapper = new ConsumerWrapper();

            consumerWrapper.Consume();

            //   var config = new ConsumerConfig
            //   {
            //     GroupId = "Loyalty_Consumer",
            //     BootstrapServers = "kafka:9092",
            //     AutoOffsetReset = AutoOffsetReset.Earliest
            //   };

            //   using (var consumer = new ConsumerBuilder<Ignore, string>(config).Build())
            //   {
            //     consumer.Subscribe("testtopic");

            //     CancellationTokenSource cts = new CancellationTokenSource();
            //     Console.CancelKeyPress += (_, e) =>
            //     {
            //       e.Cancel = true;
            //       cts.Cancel();
            //     };

            //     try
            //     {
            //       while (true)
            //       {
            //         try
            //         {
            //           var cr = consumer.Consume(cts.Token);
            //           Console.WriteLine("LoyaltyService.Consumer:" + cr.Message.Value);
            //         }
            //         catch (ConsumeException e)
            //         {
            //           Console.WriteLine($"Error occured: {e.Error.Reason}");
            //         }
            //       }
            //     }
            //     catch (OperationCanceledException)
            //     {
            //       consumer.Close();
            //     }
            //   }
        }
예제 #10
0
            protected override async Task ExecuteAsync(CancellationToken stoppingToken)
            {
                using (var scope = _serviceScopeFactory.CreateScope())
                {
                    var _paymentRepository = scope.ServiceProvider.GetRequiredService <IPaymentRepository>();

                    await ConsumerWrapper.Consume(_consumerConfig, stoppingToken, "handle-payment", async (cr) =>
                    {
                        var entity    = JsonConvert.DeserializeObject <PaymentEntity>(cr.Message.Value);
                        var payResult = await _paymentRepository.Pay(entity.Id);
                        if (!payResult.Success)
                        {
                            var data = new PaymentSagaEntity(entity.Id, payResult.Message);
                            ProducerWrapper.ProduceAsync(_producerConfig, "handle-payment-error", data);
                        }
                    });
                }
            }
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            Console.WriteLine("OrderProcessing Service Started");

            while (!stoppingToken.IsCancellationRequested)
            {
                var    consumerHelper = new ConsumerWrapper(consumerConfig, "orderrequests");
                string orderRequest   = consumerHelper.ReadMessage();

                //Deserialize
                OrderRequest order = JsonConvert.DeserializeObject <OrderRequest>(orderRequest);

                //TODO:: Process Order
                Console.WriteLine($"Info: OrderHandler => Processing the order for {order.ProductName}");
                order.Status = OrderStatus.Completed;

                //Write to ReadyToShip Queue
                var producerWrapper = new ProducerWrapper(producerConfig, "readytoship");
                await producerWrapper.WriteMessage(JsonConvert.SerializeObject(order));
            }
        }