2010-09-22 270 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 DLL設置爲複製本地。我感到好奇,它沒有產生運行時錯誤。我覺得很愚蠢。

0

我做同樣的事情,它適用於我。確保您在NetworkService下運行該服務。此外,防火牆可能是一個問題。

0

如果您的服務未能開始使用事件日誌查看器檢查事件日誌(應用程序事件日誌)。

如果沒有線索,應首先確定哪些發給你正在爲(log4net的可能是有用的或只是簡單地寫例外事件日誌):如果您使用的是當地的RabbitMQ

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

有任務用戶的機器,任務用戶只能通過環回訪問!在這種情況下,你應該增加不同的用戶,如:

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

問候...