2010-09-22 349 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 ".*" ".*" ".*" 

问候...