2013-05-13 3 views
1

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

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

MSMQ не позволяет мне сохранять сообщение в очереди при работе над ним, например, я могу заглянуть или прочитать. Чтение принимает сообщение из очереди, и просмотр не позволяет изменять сообщение (статус).

Спасибо

+0

Как об использовании транзакций? MSMQ вернет сообщение, если транзакция завершится с ошибкой. –

ответ

1

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

Конечно, обновление элементов очереди in-situ не поддерживается по причинам, о которых вы заявляете.

Если вам не нужна полноразмерная реляционная БД, вы можете использовать кеш памяти в некотором роде, например memcached, или дешевый объект db, такой как ворон.

0

Посмотрите на RabbitMQ или на многие другие очереди сообщений. Большинство из них предлагают эту функцию из коробки.

Например. RabbitMQ называет то, что вы описываете, рабочие очереди. Несколько потребителей могут вытащить из одной очереди и не вытащить один и тот же элемент. Кроме того, если вы используете подтверждения и обработка не выполняется, элемент не удаляется из очереди.

примеры .net: https://www.rabbitmq.com/tutorials/tutorial-two-dotnet.html

EDIT: После того, как с помощью MSMQ себя, было бы, наверное, очень хорошо работают для того, что вы делаете, насколько я могу сказать. Ключ заключается в использовании транзакций и нескольких очередей. Например, каждый статус должен иметь свою собственную очередь. Достаточно безопасно «перемещать» сообщения из одной очереди в другую, так как это происходит в транзакции. Это перемещение сообщений - это, по сути, ваше изменение статуса.

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

MSMQ и очереди в целом требуют различного набора шаблонов, чем большинство программистов используют. Запомни.

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

Смежные вопросы