使用C#库创建RabbitMQ服务器时出现异常

5
我有一个控制台应用程序,它启动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的那一行。我得到的确切异常是:
"The AMQP operation was interrupted: AMQP close-reason, initiated by Peer, code=404, text="NOT_FOUND - no queue 'FavorCompletions' in vhost '/'", classId=50, methodId=10, cause="。
我曾经让它工作过,然后重构了一些代码,结果就出问题了。我不知道我做错了什么,因为所有的示例应用程序似乎都做了完全相同的事情。
任何帮助将不胜感激。

不确定为什么它失败了,但是作为解决方法,您可以使用代理的管理页面手动声明和绑定队列,并将其从代码中删除。 - Brian Kelly
仍然遇到这个问题吗?还是已经放弃/继续前进了? - Nick Josevski
1个回答

1

不知道你的QueueModelFactory代码中的CreateModel()是什么,看着其他代码中使用的ExchangeDeclare、QueueDeclare和QueueBind似乎没问题。

我能建议的就是你创建连接/模型的方式可能有问题。

可以尝试替换你的

var model = QueueModelFactory.CreateModel();

使用:

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

看起来启动并没有导致异常。

我之前遇到过你的异常,但是没有缩小确切的原因,在我的某个案例中,我在声明 exchange 的 model.ExchangeDeclare() 部分犯了一个错误,所以那也是需要注意的区域。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接