这是一个使用RabbitMQ.Client
版本4.1.1的简单程序:
var message = Encoding.UTF8.GetBytes("test");
var cf = new ConnectionFactory();
using (var conn = cf.CreateConnection())
using (var channel = conn.CreateModel())
{
int i = 1;
while (true)
{
Console.WriteLine(i++);
channel.BasicPublish("nonexistent", "", body: message);
}
}
这里我试图发布到尚未在服务器上声明的交易所。这会导致错误,即404,NOT_FOUND - no exchange 'nonexistent' in vhost '/'
被抛出。但是,错误不会立即在第一个BasicPublish
调用中抛出,而是随机向下抛出。我在BasicPublish
等8次,22次,40次调用之后抛出了它。ModelShutdown
事件仅在异常之后被提升,因此它也没有帮助。
问题是,为什么不立即投掷,以便我可以检测错误并采取行动?它表现得好像许多出版物成功,而实际上他们并没有。我该怎么做才能使客户端表现出可预测的行为?感谢。
答案 0 :(得分:0)
我认为问题可能是BasicPublish
返回时不能保证消息是在RabbitMQ服务器上到达的。因此,当您尝试发布到不存在的交易所时,您不能立即获得异常。
我认为你可以尝试两种不同的方法: