RabbitMQ C#捕获异常问题

RabbitMQ C#捕获异常问题,c#,.net,rabbitmq,amqp,C#,.net,Rabbitmq,Amqp,我有一个简单的C#应用程序,它每秒向我的RabbitMQ交换发送一条消息。当我的互联网连接中断时,应用程序将崩溃。所以我添加了一个Try/Catch语句,现在它不再崩溃了。但是,当连接恢复时,它将不再发送数据。我必须关闭应用程序,然后重新打开它。我这样做对吗 private void rabbitmqxmit() { try { while (rmqtxrun == true) {

我有一个简单的C#应用程序,它每秒向我的RabbitMQ交换发送一条消息。当我的互联网连接中断时,应用程序将崩溃。所以我添加了一个Try/Catch语句,现在它不再崩溃了。但是,当连接恢复时,它将不再发送数据。我必须关闭应用程序,然后重新打开它。我这样做对吗

   private void rabbitmqxmit()
    {
        try
        {
            while (rmqtxrun == true)
            {

                ConnectionFactory factory = new ConnectionFactory();
                factory.HostName = textBox3.Text;
                using (IConnection connection = factory.CreateConnection())
                using (IModel channel = connection.CreateModel())
                {


                    button1.BackColor = Color.Green;

                    string message = textBox1.Text;
                    byte[] body = System.Text.Encoding.UTF8.GetBytes(message);

                    channel.BasicPublish(textboxExchange.Text, textboxKey.Text, null, body);

                    txtboxTransmitting.Text = message;
                    button1.BackColor = Color.Gray;

                    Thread.Sleep(Convert.ToInt32(textBox4.Text));

                }


            }
        }
        catch {}
    }

您可能需要重新初始化该频道-尝试一下。由于using子句,连接和通道将以一种良好的方式进行处理。如果ConnectionFactory还实现了IDisposable,那么也可以在using子句中创建它


而且,捕获所有异常而不处理它们是一种非常糟糕的方法。更好的方法是只捕获连接异常

您可能需要重新初始化频道-试试看。由于using子句,连接和通道将以一种良好的方式进行处理。如果ConnectionFactory还实现了IDisposable,那么也可以在using子句中创建它


而且,捕获所有异常而不处理它们是一种非常糟糕的方法。更好的方法是只捕获连接异常

当异常发生时,您实际上是在退出循环。为了得到您想要做的事情,您需要在while循环中移动try/catch


但是,如果您找到了一种测试连接的方法,而不是期望出现异常,那么它会更干净。通过简单地采取任何例外和倾销,你正在失去看到其他事情可能出错的能力。最低限度,我只会尝试捕获您期望发生的异常,并将其记录到某个地方。

当异常发生时,您实际上是在退出循环。为了得到您想要做的事情,您需要在while循环中移动try/catch


但是,如果您找到了一种测试连接的方法,而不是期望出现异常,那么它会更干净。通过简单地采取任何例外和倾销,你正在失去看到其他事情可能出错的能力。最低限度,我只会尝试捕获您预期会发生的异常,并将其记录到某个地方。

“我这样做是否正确?”否,因为抑制错误不会使其消失。伤害仍然存在——你只是再也看不到了。理解正在发生的事情并修复程序。“我这样做正确吗?”否,因为抑制错误不会使它消失。伤害仍然存在——你只是再也看不到了。了解正在发生的情况并修复程序。如何重新初始化频道?我会在Catch字段中添加语句吗?我会如何重新初始化通道?我会在Catch字段中放入一条语句吗?当连接关闭时,RabbitMQ抛出
EndOfStream
异常。关于连接测试,最好的测试方法是尝试使用它发送消息。RabbitMQ在连接关闭时抛出
EndOfStream
异常。关于连接测试,最好的测试方法是尝试使用它来发送消息。