public IActionResult Get(string id)
 {
     using (var conn = factory.CreateConnection())
         using (var channel = conn.CreateModel())
         {
             channel.ExchangeDeclare("psw", ExchangeType.Direct, true);
             channel.QueueBind("psw-special-offers-queue", "psw", "psw.specialoffers");
             var data = channel.BasicGet("psw-special-offers-queue", false);
             if (data == null)
             {
                 return(BadRequest("No data"));
             }
             var msg = Encoding.UTF8.GetString(data.Body.ToArray());
             channel.BasicAck(data.DeliveryTag, false);
             PharmacyNotification pharmacyNotification = _notificationService.Add(msg);
             if (pharmacyNotification == null)
             {
                 return(NotFound());
             }
             else
             {
                 return(Ok(pharmacyNotification));
             }
         }
 }
Ejemplo n.º 2
0
        public override Task StartAsync(CancellationToken cancellationToken)
        {
            var factory = new ConnectionFactory();

            factory.Uri = new Uri(url.Replace("amqp://", "amqps://"));
            connection  = factory.CreateConnection();
            channel     = connection.CreateModel();

            channel.ExchangeDeclare("psw-exchange", ExchangeType.Direct, true);

            channel.QueueBind("psw-queue", "psw-exchange", "psw-key");

            var  consumer = new EventingBasicConsumer(channel);
            bool recive   = true;

            //while(recive){
            //    var reply = channel.BasicGet("psw-queue", false);
            //    if (reply != null)
            //    {
            //        var body = reply.Body.ToArray();
            //        var msg = Encoding.UTF8.GetString(body);

            //        channel.BasicAck(reply.DeliveryTag, false);
            //    }
            //    else
            //        recive = false;
            //}

            consumer.Received += (ch, ea) =>
            {
                var body = ea.Body.ToArray();
                try
                {
                    var msg = Encoding.UTF8.GetString(body);
                    Console.WriteLine(msg);
                    //WriteToFile(msg);
                    _notificationService.Add(msg);
                    channel.BasicAck(ea.DeliveryTag, false);
                }
                catch
                {
                    channel.BasicReject(ea.DeliveryTag, true);
                }
            };

            channel.BasicConsume(queue: "psw-queue",
                                 autoAck: false,
                                 consumer: consumer);

            return(base.StartAsync(cancellationToken));
        }
Ejemplo n.º 3
0
        public Task StartAsync(CancellationToken cancellationToken)
        {
            using (var scope = scopeFactory.CreateScope())
            {
                var MySQLContext = scope.ServiceProvider.GetRequiredService <PharmacyDbContext>();
                _notificationService = scope.ServiceProvider.GetRequiredService <IPharmacyNotificationService>();

                var factory = new ConnectionFactory
                {
                    Uri = new Uri(url.Replace("amqp://", "amqps://"))
                };
                connection = factory.CreateConnection();
                channel    = connection.CreateModel();

                channel.ExchangeDeclare("psw-exchange", ExchangeType.Direct, true);

                channel.QueueBind("psw-queue", "psw-exchange", "psw-key");

                var consumer = new EventingBasicConsumer(channel);

                bool recive = true;

                while (recive)
                {
                    var reply = channel.BasicGet("psw-queue", false);
                    if (reply != null)
                    {
                        var body = reply.Body.ToArray();
                        try
                        {
                            var msg = Encoding.UTF8.GetString(body);

                            _notificationService.Add(msg);
                            Console.WriteLine(msg);
                            Thread.Sleep(10000);
                            channel.BasicAck(reply.DeliveryTag, false);
                        }
                        catch
                        {
                            channel.BasicReject(reply.DeliveryTag, true);
                        }
                    }
                    else
                    {
                        recive = false;
                    }
                }

                /* For future development
                 * consumer.Received += (ch, ea) =>
                 * {
                 *  var body = ea.Body.ToArray();
                 *  try
                 *  {
                 *      var msg = Encoding.UTF8.GetString(body);
                 *      Console.WriteLine(msg);
                 *      //WriteToFile(msg);
                 *      _notificationService.Add(msg);
                 *      Thread.Sleep(10000);
                 *      channel.BasicAck(ea.DeliveryTag, false);
                 *  }
                 *  catch
                 *  {
                 *      channel.BasicReject(ea.DeliveryTag, true);
                 *  }
                 * };
                 *
                 * channel.BasicConsume(queue: "psw-queue",
                 *                   autoAck: false,
                 *                   consumer: consumer);
                 */
                return(StartAsync(cancellationToken));
            }
        }