public void Consume()
        {
            Task.Run(() =>
            {
                Console.WriteLine($"Starting Kafka subscription to {this.topic}");
                using (var consumer = new Consumer <Null, string>(this.config, null, new StringDeserializer(Encoding.UTF8)))
                {
                    consumer.OnError += (_, error) =>
                                        Console.WriteLine($"Orders Error: {error}");

                    consumer.OnConsumeError += (_, error) =>
                                               Console.WriteLine($"Orders Consume Error: {error}");

                    consumer.OnMessage += (_, msg) =>
                                          Console.WriteLine($"Orders message available: {msg}");

                    consumer.Subscribe(new[] { this.topic });
                    consumer.Assign(new List <TopicPartitionOffset> {
                        new TopicPartitionOffset(this.topic, 0, 0)
                    });
                    //consumer.Seek(new TopicPartitionOffset(topic, 0, 0));
                    while (true)
                    {
                        Message <Null, string> msg;
                        if (consumer.Consume(out msg, TimeSpan.FromSeconds(1)))
                        {
                            Console.WriteLine($"Topic: {msg.Topic} Partition: {msg.Partition} Offset: {msg.Offset} {msg.Value}");
                            string rawJson = msg.Value;
                            try
                            {
                                OrderAcceptedEvent evt = JsonConvert.DeserializeObject <OrderAcceptedEvent>(rawJson);
                                this.eventProcessor.HandleOrderAcceptedEvent(evt);
                                var committedOffsets = consumer.CommitAsync(msg).Result;
                                if (committedOffsets.Error.HasError)
                                {
                                    Console.WriteLine($"Failed to commit offsets : {committedOffsets.Error.Reason}");
                                }
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine(ex.StackTrace);
                                Console.WriteLine($"Failed to handle order accepted event : ${ex}");
                            }
                        }
                    }
                }
            });
        }
Esempio n. 2
0
        public bool HandleOrderAcceptedEvent(OrderAcceptedEvent evt)
        {
            Console.WriteLine("Handling order accepted event.");
            var result = this.orderRepository.Add(new Order
            {
                OrderId   = evt.OrderId,
                CreatedOn = (long)evt.CreatedOn,
                TaxRate   = (int)evt.TaxRate,
                UserId    = evt.UserId,
                LineItems = (from itm in evt.LineItems
                             select new Entities.LineItem
                {
                    SKU = itm.SKU,
                    OrderId = evt.OrderId,
                    Quantity = (int)itm.Quantity,
                    UnitPrice = (int)itm.UnitPrice
                }).ToArray()
            });

            return(result != null);
        }
Esempio n. 3
0
        public bool HandleOrderAcceptedEvent(OrderAcceptedEvent evt)
        {
            Console.WriteLine("Handling order accepted event.");
            Order result = orderRepository.Add(new Order
            {
                OrderID   = evt.OrderID,
                CreatedOn = (long)evt.CreatedOn,
                TaxRate   = (int)evt.TaxRate,
                UserID    = evt.UserID,
                LineItems = (from itm in evt.LineItems
                             select new PartialFoods.Services.OrderManagementServer.Entities.LineItem
                {
                    SKU = itm.SKU,
                    OrderID = evt.OrderID,
                    Quantity = (int)itm.Quantity,
                    UnitPrice = (int)itm.UnitPrice
                }).ToArray()
            });

            return(result != null);
        }