Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

RabbitMQ and SharedQueue closed

Im using RabbitMQ to send simple short int information, first I'm sending id to one project like that:

    private void SendPgcIdToRabbitMQ(string id) 
    {
        var factory = new ConnectionFactory() { HostName = "localhost" };
        using (var connection = factory.CreateConnection()) 
        {
            using (var channel = connection.CreateModel()) 
            {
                bool durable = true;
                channel.QueueDeclare("XQueue", durable, false, false, null);

                var body = Encoding.UTF8.GetBytes(id);

                channel.BasicPublish("", "XQueue", null, body);
                Console.WriteLine(" [x] Sent {0}", id);
            }
        }
    }

and listener of it:

    public void Listener() 
    {
        var factory = new ConnectionFactory() { HostName = "localhost" };
        using (var connection = factory.CreateConnection()) 
        {
            using (var channel = connection.CreateModel()) 
            {
                channel.QueueDeclare("XQueue", true, false, false, null);

                var consumer = new QueueingBasicConsumer(channel);
                channel.BasicConsume("XQueue", false, consumer);

                Console.WriteLine(" [*] Waiting for messages. " +
                                  "To exit press CTRL+C");
                while (true) {
                    var ea =
                        (BasicDeliverEventArgs)consumer.Queue.Dequeue();

                    var body = ea.Body;
                    var message = Encoding.UTF8.GetString(body);
                    Console.WriteLine(" [x] Received {0}", message);

                    AddPGCFileID(message);

                    channel.BasicAck(ea.DeliveryTag, false);

                    Thread.Sleep(500);
                }
            }
        }
    }

It works fine, so after receiving message I'm processing some operation wit it, then I get second ID and create other queue to do this same:

        private void SendSurveyIdToRabbitMQ(int yID) 
    {
        var factory = new ConnectionFactory() { HostName = "localhost" };
        using (var connection = factory.CreateConnection()) {
            using (var channel = connection.CreateModel()) {
                bool durable = true;
                channel.QueueDeclare("YQueue", durable, false, false, null);

                var body = Encoding.UTF8.GetBytes(yID.ToString());

                channel.BasicPublish("", "YQueue", null, body);
                Console.WriteLine(" [x] Sent {0}", yID);
            }
        }
    }

and receive:

        public void InquiryListener() 
    {
        var factory = new ConnectionFactory() { HostName = "localhost" };
        using (var connection = factory.CreateConnection()) {
            using (var channel = connection.CreateModel()) {
                channel.QueueDeclare("YQueue", true, false, false, null);

                var consumer = new QueueingBasicConsumer(channel);
                channel.BasicConsume("YQueue", false, consumer);

                Console.WriteLine(" [*] Waiting for messages. " +
                                  "To exit press CTRL+C");
                while (true) {
                    var ea =
                        (BasicDeliverEventArgs)consumer.Queue.Dequeue();

                    var body = ea.Body;
                    var message = Encoding.UTF8.GetString(body);
                    Console.WriteLine(" [x] Received {0}", message);

                    StartProcessing(Convert.ToInt32(message));

                    channel.BasicAck(ea.DeliveryTag, false);

                    Thread.Sleep(500);
                }
            }
        }
    }

First queue sending and receiving works fine but at second I get: enter image description here

It is strange because it was working that way, from some time I'm geting this problem. I whas reseting rabbitmq, removin all queues etc. can't find where is a problem. Any ideas?

edit: I whas debuging to know if second process is ending properly (eariel crash on second proces don't cause problem with rabbitmq) and it passed, I whas supriced because no error ocurs on YQueue, but after about minute of working my process (only waiting, non incomming message, non processing) I gey this same exception on XQueue

like image 879
Carlos28 Avatar asked Nov 10 '22 01:11

Carlos28


1 Answers

Check first if the queue is empty before executing while(true){ ... }.

like image 173
syver rodriguez Avatar answered Nov 14 '22 22:11

syver rodriguez