private void OnQueryReceived(object model, BasicDeliverEventArgs ea) { var channel = _channels[RequestsInfo_QueueName]; var replyProps = channel.CreateBasicProperties(); var body = ea.Body.ToArray(); var props = ea.BasicProperties; replyProps.CorrelationId = props.CorrelationId; var message = Encoding.UTF8.GetString(body); _logger.LogInformation($"Received message {message} at {DateTime.UtcNow}"); var queryDict = JsonSerializer.Deserialize <Dictionary <string, string> >(body); var query = Enum.Parse <Queries>(queryDict["Query"]); var args = queryDict .Where(s => s.Key != "Query") .ToDictionary(d => d.Key, d => d.Value); // Perform the query var responseBytes = _queryHandler.QueryFor(query, args); channel.BasicPublish( exchange: "", routingKey: props.ReplyTo, basicProperties: replyProps, body: responseBytes); // note the format specifier _logger.LogInformation($"handled {query:g} query at {DateTime.UtcNow}"); }