Ejemplo n.º 1
0
        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}");
        }