Как создать очередь - PullRequest
2 голосов
/ 11 мая 2010

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

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

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

Есть проблемы с этим методом?

Есть ли лучший метод, о котором вы можете подумать?

Ответы [ 5 ]

10 голосов
/ 11 мая 2010

Я бы использовал MSMQ, это может быть старая технология, но она идеально подходит для сценария, который вы описываете.

1 голос
/ 11 мая 2010

Что если вы используете комбинацию AJAX и службы Windows?

На стороне веб-сайта: когда человек решает создать учетную запись электронной почты, вы добавляете запрос в таблицу базы данных. Если они хотят подождать, предоставьте веб-страницу, которая использует AJAX для частой проверки (10 секунд?), Была ли создана их учетная запись или нет. Если это веб-сайт в стиле приложения, вы можете разрешить им продолжить работу и открыть сообщение после создания учетной записи. Если они не хотят ждать, они закрывают страницу или переходят на другую и, возможно, получают электронное письмо, как только это будет сделано.

На стороне обработки: создайте службу Windows, которая проверяет таблицу на наличие новых запросов. Как только это сделано с запросом, он должен каким-то образом связаться с пользователем, возможно, установив флаг статуса в запросе. Это то, что вызов AJAX будет искать. Вы также можете отправить электронное письмо в этот момент.

Если вы используете запланированное задание с консольным приложением вместо службы Windows, вы рискуете запустить несколько экземпляров одновременно. Вам потребуется реализовать какой-то механизм блокировки (на уровне приложения или запроса), чтобы предотвратить обработку одного и того же дважды.

1 голос
/ 11 мая 2010

Создание службы WCF для управления очередью и ее действиями. На сервисе выставьте метод для добавления действия в очередь.

Таким образом, очередь полностью не зависит от вашего сайта.

0 голосов
/ 11 мая 2010

К сожалению, ваш вопрос слишком расплывчат, чтобы дать какие-либо реальные детали. Если это то, что вы хотите управлять вне основного приложения, тогда служба Windows была бы немного более подходящей, чем создание консоли ... С точки зрения интеграции и управления жизненным циклом это обеспечивает хороший подход для добавления других функций (например, счетчиков производительности, размещенных данных). Услуги по управлению в WCF, Remoting и т.д ...). MSMQ великолепен, хотя в развертывании задействовано немного больше. Если вы готовы потратить время, есть много преимуществ в использовании MSMQ. Если вы действительно хотите создать свою собственную очередь точка-точка, то есть множество примеров в Интернете, которые могут служить примером. Вот один, http://www.smelser.net/blog/page/SmellyQueue-(Durable-Queue).aspx.

0 голосов
/ 11 мая 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...