首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RabbitMQ和SharedQueue已关闭

RabbitMQ和SharedQueue已关闭
EN

Stack Overflow用户
提问于 2014-09-15 15:51:37
回答 1查看 2K关注 0票数 5

我正在使用RabbitMQ发送简单的短整数信息,首先我将id发送到一个项目,如下所示:

代码语言:javascript
复制
    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);
            }
        }
    }

它的倾听者:

代码语言:javascript
复制
    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);
                }
            }
        }
    }

它工作得很好,所以在收到消息后,我正在用它处理一些操作,然后我获得第二个ID,并创建其他队列来做同样的事情:

代码语言:javascript
复制
        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);
            }
        }
    }

并接收:

代码语言:javascript
复制
        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);
                }
            }
        }
    }

第一个队列的发送和接收工作正常,但在第二个队列中我得到:

这很奇怪,因为它是这样工作的,从一段时间以来,我就遇到了这个问题。我正在重置rabbitmq,删除所有队列等,找不到哪里有问题。有什么想法吗?

编辑:我正在调试以了解第二个进程是否正常结束(第二个进程早期崩溃不会导致rabbitmq的问题),它通过了,因为在YQueue上没有错误发生,但在我的进程工作大约一分钟后(只等待,不通信消息,不处理),我在XQueue上发现了同样的异常

EN

回答 1

Stack Overflow用户

发布于 2015-03-27 14:18:48

在执行while(true){ ... }之前,首先检查队列是否为空。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25843132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档