Чтение количества сообщений MSMQ с помощью ruby - PullRequest
1 голос
/ 18 января 2012

У меня проблема с запросом количества сообщений из удаленной очереди msmq.

Это мой код:

def get_message_count
    mq_management = WIN32OLE.new('MSMQ.MSMQManagement')
    mq_management.Init('xxx.yyy.zz.aa', nil,'direct=tcp:xxx.yyy.zz.aa\private$\inbox')
    message_count = mq_management.MessageCount
end

xxx.yyy.zz.aa - это IP-адресудаленного компьютера.

Этот метод фактически работает как брелок, НО:

  1. , если очередь пуста, то я продолжаю получать эту ошибку после определенного количества времени:

    `method_missing ': Init (WIN32OLERuntimeError) Код ошибки OLE: C00E0004 в MSMQManagement Очередь не открыта или может не существовать.Код ошибки HRESULT: 0x80020009 Произошло исключение.

  2. , если в очереди все еще есть элементы, тогда этот метод работает, как и предполагалось.

Iнашел эту статью: Как создать исходящую очередь MSMQ? , в которой говорится:

MSMQ поддерживает очередь в рабочем состоянии (даже если она пуста) в течение нескольких минут на всякий случайВы собираетесь отправить другое сообщение.Это экономит администратору очередей усилия по повторному установлению сетевого подключения.Эта задержка очистки контролируется значением реестра CleanupInterval - 5 минут для клиентов и 2 минуты для серверов.

В настоящее время мы не можем настраивать параметры реестра.Другой вариант, вероятно, состоит в том, чтобы попытаться получить количество сообщений через WMI, но я не уверен, как вы делаете это в ruby ​​(будучи разработчиком .NET)

Может быть, есть возможность «разбудить» очередь?

Буду признателен за любую помощь!Спасибо

1 Ответ

1 голос
/ 18 января 2012

Для эффективности MSMQ не поддерживает данные о производительности в очередях:

  1. Пусто и
  2. Закрыто

Например, у вас может быть машина с тысячами пустых очередей, которая блокирует ресурсы памяти, если такие данные активно поддерживаются. По сути, пустые очереди не существуют для анализа, пока они не были открыты приложением.

Мой пост в блоге об исходящих очередях не имеет ничего общего с этой ситуацией, когда вы запрашиваете информацию о частной очереди.

Приветствие Джон Брейквелл

...