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

Jon*_*ter 5 c# rabbitmq

我有一个控制台应用程序,它启动 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);
}
Run Code Online (Sandbox Code Playgroud)

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

“AMQP 操作被中断:AMQP 关闭原因,由 Peer 发起,代码 = 404,text =“NOT_FOUND - vhost '/' 中没有队列 'FavorCompletions'”,classId=50,methodId=10,cause=”。

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

任何帮助,将不胜感激。

Nic*_*ski 1

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

我只能建议您如何创建连接/模型存在问题。

替换你的

var model = QueueModelFactory.CreateModel();
Run Code Online (Sandbox Code Playgroud)

和 :

IModel model = new ConnectionFactory { Address = "127.0.0.1" }
    .CreateConnection()
    .CreateModel();
Run Code Online (Sandbox Code Playgroud)

似乎开始并没有导致该异常。

我以前经历过您的异常,但没有缩小其确切原因,在我的一个案例中,我在声明交换 model.ExchangeDeclare ()部分时犯了一个错误,所以这也是一个需要关注的领域。