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}"); } } } } }); }
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); }
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); }