RabbitMQ потребитель - PullRequest
       20

RabbitMQ потребитель

2 голосов
/ 22 сентября 2010

У меня есть служба Windows, которая получает сообщения из очереди RabbitMQ. Служба работает локально на компьютере с 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);
                }

            }
        }
    } 

Ответы [ 3 ]

2 голосов
/ 23 сентября 2010

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

0 голосов
/ 21 мая 2015

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

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

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

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

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

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

0 голосов
/ 25 мая 2012

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

...