Дизайн: вопрос управления очередью (C #) - PullRequest
5 голосов
/ 07 сентября 2010

Я хочу создать службу Windows, которая будет использовать удаленную службу кодирования (например, encoding.com, zencoder и т. Д.) Для загрузки видеофайлов для кодирования, загрузки их после завершения процесса кодирования и обработки.

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

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

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

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

Ответы [ 2 ]

1 голос
/ 08 сентября 2010

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

Как я вижу,задача состоит в том, чтобы не получать и не обрабатывать больше заданного ограниченного числа заданий из очереди в зависимости от типа задания.У меня некоторое время назад была похожая проблема, которая привела к вопросу здесь на SO и последующему сообщению в блоге с моим решением , оба из которых могли бы дать вам некоторые идеи.*

Короче говоря, я решил сохранить список "токенов".Когда бы я ни захотел выполнить работу с какими-то ограничениями, я сначала взял токен.Если токены недоступны, мне нужно подождать, пока они не станут доступны.Затем вы можете использовать любой механизм организации очередей, подходящий для обработки очереди как таковой.

1 голос
/ 08 сентября 2010

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

Очередь может быть реализована в MSMQ, SQL Server или просто в коде и во всех очередях в памяти. Для рабочего процесса вы можете использовать Windows Workflow Foundation или реализовать его самостоятельно, что, вероятно, будет проще, но изменить будет сложнее.

Так что, если вы дадите еще несколько советов, я смогу помочь вам лучше.

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