Exemple #1
0
        public void SendMessageAsync()
        {
            //declare rpc queue if not done already
            channel.QueueDeclare("rpc_async_queue", false, false, false, null);

            //set up quality of service, how messages are transported?
            channel.BasicQos(0, 1, false);

            //set up consumer event for when message is received
            EventingBasicConsumer consumer = new EventingBasicConsumer(channel);

            consumer.Received += async(model, ea) =>
            {
                string jsonString = null;

                //grab message properties
                var body  = ea.Body;
                var props = ea.BasicProperties;

                //set up reply message properties
                var replyProps = channel.CreateBasicProperties();
                replyProps.CorrelationId = props.CorrelationId;

                try
                {
                    //deserialize message
                    var message = Encoding.UTF8.GetString(body);

                    //body should be query for search, pass query to ES service
                    IDataSourceService         dataSourceSerive = new DataSourceFactory();
                    IReadOnlyCollection <Nerd> response         = await dataSourceSerive.GetSearchResultsAsync(message);

                    //serialize response for reply queue
                    jsonString = JsonConvert.SerializeObject(response);
                }
                catch (Exception e)
                {
                    //Console.WriteLine(" [.] " + e.Message);
                    jsonString = "{\"error\":\"" + e.Message + "\"}";
                }
                finally
                {
                    //serialize json to bytes for message
                    var responseBytes = Encoding.UTF8.GetBytes(jsonString);

                    //publish and acknowledge response to reply queue
                    channel.BasicPublish("", props.ReplyTo, replyProps, responseBytes);
                    channel.BasicAck(ea.DeliveryTag, false);
                }
            };

            //consume messages from rpc queue and trigger consumer event
            //channel.BasicConsume("rpc_queue", false, consumer);
            channel.BasicConsume(consumer: consumer, queue: "rpc_async_queue", autoAck: false);
            //Console.WriteLine(" [x] Awaiting RPC requests");

            //Console.WriteLine(" Press [enter] to exit.");
            //Console.ReadLine();
        }
Exemple #2
0
        public async Task <IActionResult> Post([FromBody] Search query)
        {
            if (query == null)
            {
                return(BadRequest());
            }

            IDataSourceService         searchEngine = new DataSourceFactory();
            IReadOnlyCollection <Nerd> res          = await searchEngine.GetSearchResultsAsync(query.Query);

            return(new OkObjectResult(res));
        }