【问题标题】:RabbitMQ .NET client does no raise errors immediatelyRabbitMQ .NET 客户端不会立即引发错误
【发布时间】:2017-03-06 15:04:24
【问题描述】:

这是一个使用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 时立即抛出,而是随机抛出。我在 8、22、40 次调用 BasicPublish 等之后将其抛出。ModelShutdown 事件仅在异常之后引发,因此它也无济于事。

问题是,为什么它不立即抛出,以便我可以检测到错误并采取措施?它表现得好像许多发布成功了,而实际上它们没有成功。我可以做些什么来使客户的行为可预测?谢谢。

【问题讨论】:

    标签: c# .net rabbitmq rabbitmq-exchange


    【解决方案1】:

    我认为问题可能是返回时BasicPublish 不能保证消息到达 RabbitMQ 服务器。因此,当您尝试发布到不存在的交易所时,您不能立即出现异常。

    我认为您可以尝试两种不同的方法:

    • 在发布之前声明交换,这样您就不必担心交换的存在
    • 使用“可靠”的发布方式:发布确认或交易(您可以找到更多信息here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-09
      • 1970-01-01
      相关资源
      最近更新 更多