我有一个简单的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 {}
}
答案 0 :(得分:3)
当异常发生时,您将有效地退出循环。为了得到你想做的事,你需要在while循环中移动你的try / catch。
但是,如果您找到了一种测试连接的方法而不是期望异常,那么它会更清晰。通过简单地采取任何例外并倾销您正在失去看到其他可能出错的事情的能力。最低限度我只会尝试捕获您期望发生的异常并将其记录到某个地方。
答案 1 :(得分:0)
您可能需要重新初始化频道 - 试试吧。由于using子句,连接和通道将以很好的方式处理。如果ConnectionFactory也实现了IDisposable,也可以在using子句中创建它。
此外,捕获所有异常并且不对它们执行任何操作是一种非常糟糕的方法。更好的方法是捕获连接异常。