2011-03-21 39 views
2

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

下面是我使用的运行服务器的代码:

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发起,代码= 404,text =”NOT_FOUND - 无队列'FavorCompletions'in vhost'/'“,classId = 50,methodId = 10,cause =“。

我曾在一点工作,然后重构一些代码只是为了让它休息。我不知道我做错了什么,因为所有示例应用程序似乎都做了完全相同的事情。

任何帮助,将不胜感激。

+0

不知道它为什么失败,但作为一种解决方法,您可以使用代理的管理页面手动声明和绑定队列,并将其从代码中移除。 – 2011-03-24 05:11:49

+0

仍然有这个问题?或放弃/继续? – 2011-05-28 01:06:57

回答

0

不知道什么是在CreateModel()QueueModelFactory代码,并在代码的其余部分研究使用ExchangeDeclare,QueueDeclare和QueueBind的他们似乎罚款。

我可以建议的是,如何创建连接/模型存在问题。

代您

var model = QueueModelFactory.CreateModel(); 

有:

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

似乎揭开序幕,并不会导致该例外。

我以前所经历的异常,但没有缩小它的确切原因,在我的情况下,一个我在宣布交换model.ExchangeDeclare()部分犯了一个错误,所以这是看一个区域也是。

0

重构..与上述相同的问题...在我的情况不知何故部分类导致问题。