Queued WCF Service, которая обрабатывает каждые x секунды

StackOverflow https://stackoverflow.com/questions/2594063

  •  25-09-2019
  •  | 
  •  

Вопрос

Мне нужно создать сервис, который может обработать через очередные запросы на настроенный интервал времени. Например, перейдите в Интернет и получите финансовые данные с сайта, требуется ограничение запросов на один раз в секунду. Я новичок в WCF, и я не уверен, если (1) WCF с MSMQ правильный выбор для реализации этого? и (2) Если так, каков самый лучший механизм для обеспечения соблюдения интервала? Нить ждать? Таймер (не уверен, как это будет работать).

Это было полезно?

Решение

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

Хотя ваш сервис, безусловно, может обрабатывать запросы от MSMQ, слушатели MSMQ в WCF будут выбирать и обработать сообщения как можно скорее; Вы не можете настроить их для обработки сообщений только каждые X секунд только (вы можете подделать его, дал правильные инструменты, но мне кажется, что это не все здорово).

Один вариант Если ваша задержка между запросами обработки не очень короткая, будет использоваться промежуточная очередь для удержания ожидающих запросов. То есть все, что посылает реальные запросы, пишет их в очередь, никто не просто слушает (очередь а), в то время как ваша служба WCF слушает в очередной очереди (очередь B). Затем есть что-то еще (может быть так же просто, как скрипт, запущенный из планировщика задач), который работает один раз в каждые x секунды / минуты / что угодно и перемещается всего 1 сообщение из очереди A в очередь B, при этом запущении фактической службы WCF для запуска.

Другие советы

WCF и MSMQ - отличная команда! Определенно стоит проверить.

Часть, которую WCF не предоставляет из коробки, - это «проверка каждые x секунд». Лучший подход здесь будет провести свою службу WCF внутри сервиса Windows NT и иметь таймер внутри сервиса NT, которая идет, чтобы проверить очередь MSMQ только один раз каждые x секунды. Не должно быть слишком сложно, чтобы реализовать, правда. Красота: Вы можете очень легко провести службу WCF внутри сервиса NT - всего несколько строк кода, и вы получаете полный контроль над тем, что происходит, и когда. Смотрите документы MSDN на Как провести службу WCF в управляемом приложении для деталей.

Ресурсы:

Или вы можете просто использовать Window Service, чтобы потреблять сообщения вместо этого. Если вы не используете функциональность WCF потребления сообщения, как только он будет опубликован, у вас, вероятно, нет причин использовать WCF в первую очередь

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top