public void Listen(Action <string> message) { using (var consumer = new Consumer <Null, string>(brokerConfig, null, deserializer)) { consumer.Subscribe(ProcessPaymentTopic); consumer.OnMessage += (_, msg) => { message(msg.Value); var value = msg.Value; var handler = value.Deserialize <Handlers.ProcessPaymentHandler>(); var request = new ProcessPaymentRequest { OrderId = handler.OrderId, InstantBuyKey = handler.InstantBuyKey, Brand = (CreditCardBrand)handler.Brand, Number = handler.Number, ExpMonth = handler.ExpMonth, ExpYear = handler.ExpYear, HolderName = handler.HolderName, SecurityCode = handler.SecurityCode, SaveCreditCard = handler.SaveCreditCard }; _paymentAppService.Process(request); }; var cancelled = false; Console.CancelKeyPress += (_, e) => { cancelled = true; e.Cancel = true; }; while (!cancelled) { consumer.Poll(-1); } } }