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