Постоянная рабочая очередь в С#
Представьте, что я хочу иметь небольшую сеть рабочих дронов, возможно, на отдельных потоках и, возможно, на отдельных процессах или даже на разных компьютерах. Рабочие элементы создаются центральной программой.
Я ищу существующий продукт или услугу, которые сделают все это для меня. Я знаю, что есть MSMQ, а также MQSeries. MQSeries слишком дорога. MSMQ, как известно, ненадежна. Система с поддержкой базы данных будет в порядке, но я не хочу владеть ею/управлять ею/писать. Я хочу использовать другую систему очереди работы.
Статьи по теме:
Ответы
Ответ 1
Я использовал Rabbit MQ в прошлом для проекта для домашних животных, вы можете добавить это в свой список для систем Queue.
Что касается структуры для обертывания очереди, вы можете взглянуть на http://www.nservicebus.com/, мы сделали несколько базовых проектов здесь при работе с этим. И вот быстрый пример для начала: http://meisinger2.wordpress.com/2009/11/09/nservicebus-fifteen-minutes/
Ответ 2
Если вы следуете некоторым рекомендациям, вы можете с успехом использовать базу данных в качестве хранилища очередей, см. Использование таблиц в качестве очередей.
SQL Server поставляется со своей собственной встроенной очередью сообщений, а именно Service Broker. Это позволяет избежать многих ошибок MSMQ, когда речь идет о масштабируемости, надежности и высокой доступности и сценариях аварийного восстановления.
Servcie Broker полностью интегрирован в базу данных (нет внешнего хранилища, одного согласованного резервного копирования/восстановления, одного устройства отказоустойчивости, нет необходимости в дорогостоящем двухфазном DTC между хранилищем сообщений и базой данных, одним единственным T-SQL API для доступ и программирование как сообщений, так и ваших данных), а также имеет некоторые уникальные уникальные функции, такие как транзакционный обмен сообщениями с гарантированной доставкой точно-на заказ, коррелированная блокировка сообщений, внутренняя активация и т.д.
Ответ 3
Я успешно использовал MassTransit в прошлом. Он поддерживает использование MSMQ, а также RabbitMQ.