Очередь работы с redis с использованием BLPOP

Я пытаюсь создать бесконечную очередь заданий с помощью redis и ruby ​​eventmachine. Чтобы достичь этого, я использую команду redis BLPOP с 0 таймаутом. После успешного BLPOP я запустил его снова.

Есть ли я на правильном пути или есть лучший способ создать очередь заданий с помощью redis?

Ответ 1

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

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

[B] RPOPLPUSH идеально подходит для этого сценария; он может атомизировать сообщение из очереди сообщений и толкает его в очередь обработки, чтобы приложение могло ответить в случае сбоя на стороне потребителя.

http://redis.io/commands/rpoplpush

Фактическая повторная очередь остается в приложении, но эта команда redis обеспечивает основу для этого.

Есть также некоторые варианты развертывания очередей, использующие redis, плавающие вокруг Интернета, такие как RestMQ [http://www.restmq.com/]