Мне нужно создать службу, которая может обрабатывать запросы в очереди с заданным интервалом времени. Например, зайдите в Интернет и получите финансовые данные с сайта, который требует, чтобы мы ограничивали запросы до одного раза в секунду. Я новичок в WCF и не уверен, что (1) WCF с MSMQ является правильным выбором для реализации этого? и (2) если да, то каков наилучший механизм для обеспечения соблюдения интервала? нить ждать? таймер (не уверен, как это будет работать).
Служба WCF в очереди, которая обрабатывается каждые X секунд
Ответы (3)
В WCF нет ничего встроенного, что позволило бы вам обрабатывать это явно, поэтому вам все равно придется выполнять всю работу самостоятельно.
Хотя ваша служба, безусловно, может обрабатывать запросы от MSMQ, прослушиватели MSMQ в WCF будут выбирать и обрабатывать сообщения как можно скорее; вы не можете настроить их для обработки сообщений только каждые X секунд (вы можете подделать это с помощью правильных инструментов, но мне кажется, что это было бы не так уж здорово).
Один из вариантов, если ваша задержка между обработкой запросов не очень короткая, — использовать промежуточную очередь для хранения ожидающих запросов. То есть все, что отправляет настоящие запросы, записывает их в очередь, которую никто не слушает напрямую (очередь A), в то время как ваша служба WCF прослушивает другую очередь (очередь B). Затем сделайте что-то еще (может быть так же просто, как сценарий, запускаемый из планировщика задач), который запускается один раз каждые X секунд/минут/независимо и перемещает только 1 сообщение из очереди A в очередь B, тем самым запуская фактическую службу WCF.
WCF и MSMQ — отличная команда! Определенно стоит проверить.
Часть, которую WCF не предоставляет из коробки, — это «проверка каждые x секунд». Лучшим подходом здесь было бы размещение службы WCF внутри службы Windows NT и наличие таймера внутри службы NT, который проверяет очередь MSMQ только один раз каждые x секунд. На самом деле не должно быть слишком сложно реализовать. Прелесть в том, что вы можете очень легко самостоятельно разместить службу WCF внутри службы NT — всего несколько строк кода, и вы получаете полный контроль над тем, что и когда происходит. См. документы MSDN в разделе Как разместить службу WCF в управляемом приложении для подробностей.
Ресурсы:
- Серия сообщений в блоге Тома Холландера на MSMQ, WCF, IIS: заставить их работать хорошо
- Motley Queue: MSMQ и WCF Начало работы
- SOA для MSMQ с помощью WCF (и почему это того стоит)
Или вы можете просто использовать оконную службу для потребления сообщений. Если вы не используете функциональные возможности WCF для обработки сообщения сразу после его публикации, то у вас, вероятно, нет причин использовать wcf в первую очередь.