Служба MSMQ не восстанавливается при перезапуске с восстановимым сообщением в очереди - PullRequest
1 голос
/ 14 июля 2011

У меня есть личная нетранзакционная очередь сообщений, работающая на Win2008 R2. Очередь прерывается, когда я делаю следующее:

  1. Поместить восстанавливаемое сообщение в очередь следующим образом:

    Message msg = new Message
    {
      Body = "hello",
      Formatter = new XmlMessageFormatter(),
      Label = "Notification",
      Recoverable = true,
      AppSpecific = 123
    };
    
    mq.Send(msg);
    

    Не получать сообщение!

  2. Перезапустить службу очереди сообщений.
  3. Служба не перезапускается успешно. Следующее сообщение регистрируется в окне просмотра событий:

    The Message Queuing service cannot start because a queue is in an
    inconsistent state. For more information, see Microsoft Knowledge
    Base article 827493 at support.microsoft.com.
    

Примечания:

  • Таким образом, сообщение, добавленное в очередь, может быть успешно извлечено из очереди перед перезапуском.
  • Единственный способ возобновить работу очереди - выполнить следующие инструкции: Несогласованное состояние MSMQ после перезапуска , но это, очевидно, препятствует восстановлению сообщений.
  • Если я оставлю Message.Recoverable = false, то служба успешно перезапустится. Но я хочу, чтобы мои сообщения пережили перезапуск службы.
  • Я получаю точно такое же поведение, когда задаю очередь как Transactional.

Есть идеи?

Ответы [ 3 ]

1 голос
/ 15 июля 2011

Попробуйте переместить каталог msmq в другое место.Возможно, существует проблема с правами доступа к диску.

1 голос
/ 14 июля 2011

Похоже, что-то мешает хранению файлов.Восстанавливаемые (включая транзакционные) сообщения записываются в файлы в каталоге MSMQ \ Storage, а также отображаются в память.При запуске файлы перезагружаются для воссоздания сообщений, отображенных в памяти.По некоторым причинам эти файлы хранения больше не работают.

Вещи, которые я искал бы:

  • Любое другое программное обеспечение, которое имеет доступ к дереву каталогов system32 \ msmq, такое как AntiВирусные продукты.Заблокируйте эти продукты из дерева каталогов.
  • Является ли хранилище на локально подключенном диске или сетевом диске (например, SAN);если не локально, попробуйте перенастроить MSMQ для использования локального диска.
  • На диске нет ошибок?Запустите команду chkdsk или аналогичную.
  • Если вы создаете новую очередь предоставления, проблема также влияет на это?

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

0 голосов
/ 20 января 2014

Дайте вашему устройству имя менее 15 символов , тогда оно будет работать.Это связано с тем, что имена Netbios могут содержать не более 15 символов.Это вызывало проблемы со службой MSMQ, в результате чего она находилась в несовместимом состоянии, как указано в ошибке.Чтобы устранить эту проблему, удалили MSMQ, переименовали машину в нечто менее 15 символов, а затем переустановили MSMQ.Это решило проблему.

...