/// <summary>Waits for response, that has been sent through on the que sent in constructor param requestQueueName</summary> protected void WaitForResponse( ) { using (var connection = factory.CreateConnection()) { using (var channel = connection.CreateModel()) { channel.QueueDeclare(queue: _requestQueueName, durable: false, exclusive: false, autoDelete: false, arguments: null); // https://gigi.nullneuron.net/gigilabs/asynchronous-rabbitmq-consumers-in-net/ var consumer = new AsyncEventingBasicConsumer(channel); consumer.Received += Received; channel.BasicConsume(_requestQueueName, true, consumer); using (var colour = new ScopedConsoleColourHelper(ConsoleColor.Green)) { Console.WriteLine("Waiting for messages..."); } while (true) { Thread.Sleep(50); } } } }
public async Task Run() { using (var colour = new ScopedConsoleColourHelper(ConsoleColor.Yellow)) { Console.WriteLine("Everybody’s Got Something to Hide Except Me and My Monkey"); } await _stockDeliveryManager.CreateOrUpdate(new StockItem() { Name = "Mr Marvelous Monkey Munch", Quantity = 100 }); var stockList = StockList.Create(); for (int i = 0; i < 100; i++) { Random rnd = new Random(); int index = rnd.Next(minValue, maxValue); int quantity = rnd.Next(minValue, maxQuantityValue); var stockItem = stockList[index]; using (var colour = new ScopedConsoleColourHelper()) { Console.WriteLine($" Name { stockItem.Name} Quantity {quantity}"); } await _stockDeliveryManager.CreateOrUpdate(new StockItem() { Name = stockItem.Name, Quantity = quantity }); await Task.Delay(2000); } }
protected override async Task Received(object sender, BasicDeliverEventArgs @event) { var stockItem = (StockItem)@event.Body.ToArray().DeSerialize(typeof(StockItem)); using (var colour = new ScopedConsoleColourHelper()) { Console.WriteLine($"Name: {stockItem.Name} Quantity: {stockItem.Quantity}"); } await _stockDeliveryManager.CreateOrUpdate(stockItem); }
protected override async Task Receive(object sender, BasicDeliverEventArgs e) { var stockOrder = (StockOrder)e.Body.ToArray().DeSerialize(typeof(StockOrder)); var correlationId = e.BasicProperties.CorrelationId; string responseQueueName = e.BasicProperties.ReplyTo; using (var colour = new ScopedConsoleColourHelper()) { Console.WriteLine($"Received: {stockOrder.OrderNumber} with CorrelationId {correlationId}"); foreach (var item in stockOrder.OrderItems) { Console.WriteLine($"Name: {item.Name} Quantity: {item.Quantity}"); } } var responseMessage = await _orderItemManager.Order(stockOrder); Reply(correlationId, responseQueueName, responseMessage.Serialize()); }
/// <summary>Waits for response.</summary> protected void WaitForResponse() { using (var connection = _factory.CreateConnection()) { using (_channel = connection.CreateModel()) { _channel.QueueDeclare(_requestQueueName, true, false, false, null); var consumer = new AsyncEventingBasicConsumer(_channel); consumer.Received += Receive; _channel.BasicConsume(_requestQueueName, true, consumer); using (var colour = new ScopedConsoleColourHelper(ConsoleColor.Green)) { Console.WriteLine("Waiting for messages..."); } while (true) { Thread.Sleep(50); } } } }