【问题标题】:RabbitMQ consumerRabbitMQ 消费者
【发布时间】:2011-04-15 21:33:09
【问题描述】:

我有一个从 RabbitMQ 队列中检索消息的 Windows 服务。该服务在 Windows 7 机器上本地运行。当我在 Windows 2008 服务器上安装该服务时,它不起作用(并且不会引发任何错误)。我的 ASP.net MVC 应用程序可以将消息发布到同一个队列。这里可能存在防火墙或安全问题吗?我应该从 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);
                }

            }
        }
    } 

【问题讨论】:

    标签: c# asp.net .net windows-services rabbitmq


    【解决方案1】:

    如果您的服务无法启动,请使用事件日志查看器检查事件日志(应用程序事件日志)。

    如果没有线索,你应该首先确定你现在遇到了什么问题(log4net 可能很有用,或者只是将异常写入事件日志):

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

    如果你在本地机器上通过 quest 用户使用 RabbitMQ,那么 quest 用户只能通过 loop-back 访问!在这种情况下,您应该添加不同的用户,例如:

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

    问候...

    【讨论】:

      【解决方案2】:

      我做同样的事情,它对我有用。确保您在 NetworkService 下运行该服务。防火墙也可能是个问题。

      【讨论】:

        【解决方案3】:

        忘记了 GAC。当我在本地安装 RabbitMQ.Client 时,它被放置在 GAC 中。没有将 RabbitMQ.Client DLL 设置为复制本地。我很好奇它没有产生运行时错误。我觉得很笨。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-09-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-20
          • 2014-03-19
          • 2016-10-10
          相关资源
          最近更新 更多