2010-09-22 4 views
2

У меня есть служба Windows, которая извлекает сообщения из очереди RabbitMQ. Служба работает локально на машине Windows 7. Когда я устанавливаю службу на сервере Windows 2008, она не работает (и не вызывает никаких ошибок). Мое приложение ASP.net MVC может публиковать сообщения в одну очередь. Мог ли быть брандмауэр или проблема безопасности здесь? Должен ли я получать сообщения от RabbitMQ иначе, чем ниже?RabbitMQ потребитель

public void PullFromQueue() 
    { 
     var connectionFactory = new ConnectionFactory(); 

     using (var connection = connectionFactory.CreateConnection()) 
     using (var channel = connection.CreateModel()) 
     { 
      var consumer = new QueueingBasicConsumer(channel); 
      channel.ExchangeDeclare(ExchangeName, ExchangeType.Direct, true); 
      channel.QueueDeclare(QueueName, true); 
      channel.QueueBind(QueueName, ExchangeName, RoutingKey, false, null); 
      channel.BasicConsume(QueueName, null, consumer); 
      while (true) 
      { 
       try 
       { 
        var e = (BasicDeliverEventArgs)consumer.Queue.Dequeue(); 
        var props = e.BasicProperties; 
        props.DeliveryMode = PersistentDelivery; 
        var businessObject = DeserializeBusinessObject(e.DeliveryTag, e.Body); 
        processBusinessObject(businessObject); 
        channel.BasicAck(e.DeliveryTag, false); 

       } 
       catch (Exception ex) 
       { 
        Log<RabbitMQWrapper>.Error("Error in pulling Business Object from Queue", ex); 
       } 

      } 
     } 
    } 

ответ

2

Забыл о GAC. Когда я установил RabbitMQ.Client локально, он был помещен в GAC. Не удалось установить библиотеку RabbitMQ.Client для локальной копии. Мне любопытно, что он не генерировал ошибку времени выполнения. Я чувствую себя глупым.

0

Я делаю то же самое, и это работает для меня. Убедитесь, что вы выполняете службу в NetworkService. Также может возникнуть проблема с брандмауэром.

0

Если вы просто не запускаете проверку журналов событий (журналов событий приложений) с помощью средства просмотра журнала событий.

Если нет никакого ключа, вы должны сначала определить, что выдаст вас возникли прямо сейчас (log4net может быть полезным или просто написать исключение EVENTLOG):

EventLog.WriteEntry(ex.Message + ", " ex.StackTrace); 

Если вы используете RabbitMQ на локальном машина с пользователем квеста, пользователь квеста может получить доступ только через loop-back! В этом случае, вы должны добавить другого пользователя как:

rabbitmqctl add_user testuser testpassword 
rabbitmqctl set_user_tags testuser administrator 
rabbitmqctl set_permissions -p/testuser ".*" ".*" ".*" 

С уважением ...

Смежные вопросы