加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – RabbitMQ和SharedQueue关闭

发布时间:2020-12-15 22:08:00 所属栏目:百科 来源:网络整理
导读:我使用RabbitMQ发送简单的短int信息,首先我将id发送到一个项目: private void SendPgcIdToRabbitMQ(string id) { var factory = new ConnectionFactory() { HostName = "localhost" }; using (var connection = factory.CreateConnection()) { using (var c
我使用RabbitMQ发送简单的短int信息,首先我将id发送到一个项目:

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,null);

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

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

和听众:

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

                var consumer = new QueueingBasicConsumer(channel);
                channel.BasicConsume("XQueue",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并创建其他队列来做同样的事情:

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",null);

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

                channel.BasicPublish("","YQueue",yID);
            }
        }
    }

并收到:

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

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

                    StartProcessing(Convert.ToInt32(message));

                    channel.BasicAck(ea.DeliveryTag,false);

                    Thread.Sleep(500);
                }
            }
        }
    }

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

这很奇怪,因为它正在以这种方式工作,从某种程度上我正在解决这个问题.我重新修复rabbitmq,删除所有队列等等都找不到问题所在.有任何想法吗?

编辑:
我很想知道第二个过程是否正常结束(第二个过程中的机器人崩溃不会导致rabbitmq出现问题)并且它已经过去了,因为YQueue上没有错误,但是在我工作了大约一分钟之后(仅等待),非incomming消息,非处理)我在XQueue上发现了同样的异常

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读