c# - RabbitMQ 和 SharedQueue 关闭

标签 c# .net-4.0 rabbitmq console-application

我正在使用 RabbitMQ 发送简单的 short 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, 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, 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 并创建其他队列来做同样的事情:

        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);
            }
        }
    }

并接收:

        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);
                }
            }
        }
    }

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

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

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

最佳答案

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

关于c# - RabbitMQ 和 SharedQueue 关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25843132/

相关文章:

c# - 连一个简单的方法都无法内联(?)

node.js - 在node.js中使用RabbitMQ的nservicebus : a non-empty message_id property is required

sockets - 如果消息发布(启用确认)到具有免费消费者的队列,RabbitMQ 是否会保证交付?

java - 测试 RabbitMQ 交换器

c# - 两个 DateTime 对象之间的格式差异时间

c# - 我们可以将基于 Xamarin(没有 Xamarin.forms)构建的 android 应用程序移植到 iOS 吗?

c# - 是否有任何已知的 .CompareTo(object value) 方法实际返回小于 -1 或大于 1 的值?

c# - 无法让 CORS 为 ASP.NET Core Web API 工作

asp.net - 英国格式的 .net 4.0 中的日期格式被破坏

.net - 升级到带有泛型类型参数的 WPF 4 时,来自 InitializeComponent 的 NullReferenceException