【问题标题】:Exception with creating a RabbitMQ server with the C# library使用 C# 库创建 RabbitMQ 服务器时出现异常
【发布时间】:2011-03-21 04:27:23
【问题描述】:

我有一个控制台应用程序,它启动 RabbitMQ 服务器(作为使用 rabbitmq-server.bat 文件的应用程序),然后尝试在其上创建一个队列并开始侦听消息。代理启动得很好,但是一旦我尝试声明队列,我就会得到一个异常,指出队列名称不存在。我对此有点困惑,因为我正在尝试创建队列,但不知道它为什么要寻找具有该名称的现有队列。

这是我用来运行服务器的代码:

var model = QueueModelFactory.CreateModel();
model.ExchangeDeclare(exchangeName, ExchangeType.Fanout, true);
model.QueueDeclare(QueueName, false, false, false, null);
model.QueueBind(QueueName, exchangeName, "");

var subscription = new Subscription(model, QueueName, false);

while (true)
{
    var args = subscription.Next();
    ProcessQueueItem(args.Body);
    subscription.Ack(args);
}

异常发生在调用 QueueDeclare 的行上。我得到的确切例外是:

"AMQP 操作被中断:AMQP 关闭原因,由 Peer 发起,code=404,text="NOT_FOUND - no queue 'FavorCompletions' in vhost '/'",classId=50,methodId=10,cause= ”。

我曾一度让这个工作正常进行,然后重构了一些代码,结果却让它崩溃了。我不知道我做错了什么,因为所有示例应用程序似乎都做同样的事情。

任何帮助将不胜感激。

【问题讨论】:

  • 不确定为什么会失败,但作为一种解决方法,您可以使用代理的管理页面手动声明和绑定队列,然后将其从代码中删除。
  • 还有这个问题吗?还是放弃/继续前进?

标签: c# rabbitmq


【解决方案1】:

不知道 CreateModel()QueueModelFactory 代码中有什么,并查看其余代码使用 ExchangeDeclare、QueueDeclare 和 QueueBind,它们看起来不错。

我只能建议您创建连接/模型的方式存在问题。

替换你的

var model = QueueModelFactory.CreateModel();

与:

IModel model = new ConnectionFactory { Address = "127.0.0.1" }
    .CreateConnection()
    .CreateModel();

似乎开始并且不会导致该异常。

我以前经历过你的异常,但没有缩小它的确切原因,在我的一个案例中,我在声明交换 model.ExchangeDeclare() 部分时犯了一个错误,所以这是也是一个值得一看的地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多