static void Main(string[] args) { int remainingAccepts = processingLimit; var messages = new TextMessages(); var repo = new TextRepository(); var metrics = new TextMetrics(); Console.WriteLine("Listening for ExchangeText/ExchangeTextSuccessMarked events, press Ctrl+C to stop..."); using (var connection = messages.CreateConnection()) using (var channel = connection.CreateModel()) { messages.ListenMessages(channel, TextMessages.QueueTextProcessingLimiter, TextMessages.ExchangeText, (model, id) => { Console.WriteLine("captured text '" + repo.GetText(id) + "' with id=" + id); bool accepted = false; if (remainingAccepts > 0) { --remainingAccepts; accepted = true; } repo.SetTextStatus(id, accepted ? TextStatus.Accepted : TextStatus.Rejected); messages.SendProcessingAccepted(id, accepted); }); messages.ListenMessages(channel, TextMessages.QueueTextProcessingLimiterRevoke, TextMessages.ExchangeTextSuccessMarked, (model, json) => { var message = TextSuccessMarkedMessage.FromJson(json); repo.SetTextStatus(message.ContextId, TextStatus.Ready); Console.WriteLine("revoke transaction for successful text '" + repo.GetText(message.ContextId) + "' with id=" + message.ContextId); if (message.Success) { ++remainingAccepts; } }); while (true) { Thread.Sleep(Timeout.Infinite); } } }