Организация очередей и изолированное хранилище - PullRequest
1 голос
/ 07 декабря 2011

У меня есть небольшое приложение, которое ставит в очередь некоторые запросы и вытаскивает их из стека.

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

Кто-нибудь знает библиотеку, которая позволит мне хранить очередь в изолированном хранилище. Во время операций enqueue и dequeue необходимо будет поддерживать очередь в любое время.

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

1012 * редактировать *

Является ли ответом на повторную сериализацию всей очереди каждый раз, когда есть enqueue и dequeue?

И как бы я "peek" во всей очереди, чтобы получить все элементы в первую очередь?

1 Ответ

1 голос
/ 07 декабря 2011

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

Если вы не хотите использовать базу данных, ActiveMQ по-прежнему сохраняет данные во временных файлах и обеспечивает надежность.

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

Я полагаю, что у вас будет больше дел, чтобы покрыть это, просто интуитивно.

Редактировать:

Сериализация всей очереди сильно замедлит работу, поскольку сериализация стоит дорого.1017 * Peek реализован как функция каждой очереди.

...