Microsoft Service Inter-Communication Проблема - PullRequest
1 голос
/ 28 января 2009

Я сейчас строю две службы Windows:

  • Первый получает сообщения от интернет-соединения и вставляет их в базу данных. Это разработано, чтобы быть быстрым и стабильным и не делать никакой другой обработки

  • Второй выполняет пакетный процесс с любыми новыми сообщениями, поступившими с момента его последнего запуска.

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

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

Полагаю, есть лучший способ сделать это, с которым я не сталкивался, может кто-нибудь, пожалуйста, укажет мне правильное направление?

Ответы [ 2 ]

2 голосов
/ 28 января 2009

На самом деле ваш путь - ИМЕННО , как бы я реализовал это для этих результатов. С MSMQ вам не нужно проверять, есть ли у вас сообщение, записанное в очередь, первый сервис просто записывает в очередь, а второй сервис просто читает из него, чтобы обработать его (когда оно активно).

Прелесть использования MSMQ заключается в том, что один или другой сервис может быть недоступен, но очереди будут работать, поэтому вы можете продолжить обработку.

1 голос
/ 08 марта 2009

Мне кажется, что для этого случая все, что вам нужно, это почтовый ящик. Первый сервис сохраняется в БД, а затем отправляет сообщение «работа для выполнения». Другой просто ожидает входящих сообщений.

MSMQ немного тяжеловесен для чего-то такого простого. С другой стороны, вы можете просто использовать MSMQ и полностью избавиться от этой БД. То, что было бы способом сделать это.

...