Исключение при создании сервера RabbitMQ с библиотекой C # - PullRequest
2 голосов
/ 21 марта 2011

У меня есть консольное приложение, которое запускает сервер 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, код = 404, текст =" NOT_FOUND - нет очереди 'FavorCompletions' в vhost '/' ", classId = 50, methodId = 10, причина = ».

В какой-то момент это сработало, а затем немного изменил код, чтобы он сломался. Я понятия не имею, что я делаю неправильно, так как все примеры приложений, кажется, делают то же самое.

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 30 мая 2011

Не зная, что находится в вашем QueueModelFactory коде для CreateModel () и глядя на остальную часть кода, использование ExchangeDeclare, QueueDeclare и QueueBind кажется нормальным.

Все, что я могу предложить, это проблема с созданием соединения / модели.

Подставляя ваше

var model = QueueModelFactory.CreateModel();

с:

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

Кажется, что это срабатывает и не вызывает этого исключения.

Я уже сталкивался с вашим исключением, но не сузил его точную причину, в одном из моих случаев я ошибся, объявив часть обмена model.ExchangeDeclare () , так что это область, чтобы смотреть тоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...