2012-03-08 12 views
5

Estoy creando un entorno multi-tenant postgres. Entonces el cliente A tiene schema_1, B tiene schema_2 ect ..¿Puedo crear colas resque sobre la marcha?

Ahora no conozco todos los clientes que tendré, así que tengo una pequeña tarea de rastrillo simple para crear un nuevo esquema basado en datos en una tabla de inquilinos. Todo perfectamente dinámico: para agregar un nuevo cliente, agregar un nuevo inquilino y hacer un arrendatario de rake: db: migrate ... tada todas las tablas están ahí y el cliente tiene su propio pequeño mundo. (Lista de confianza desconocida, pero pequeña para rake en el registro no es un problema)

Todo bien ...
Excepto por trabajos de fondo.
Quiero tener una Cola diferente para cada cliente.

http://blog.kabisa.nl/2010/03/16/dynamic-queue-assignment-for-resque-jobs/ sigue utilizando colas codificadas. Puede elegir entre dos que conocía cuando escribió el código, pero todavía no son realmente dinámicos. No realmente.

Así que mi pregunta es. Tengo una cadena "tenant_1" que describe el mundo de mis clientes.
¿Cómo puedo usar esa cadena para crear una cola que contenga trabajos solo para "él".
¿Cómo puedo crear colas dinámicas reales?

Respuesta

4

Resque :: Job.create ("cliente # {client_id}", MyWorker, 3);

Esto funciona para nosotros.

+2

y cómo se eliminan estas colas después de que hayan finalizado? O no es un problema tener 1000 colas de clientes, y el 50% de ellos están inactivos – Luccas

8

En caso de que alguien se encuentre con esta pregunta como yo, encontré una respuesta dentro de la fuente.

Resque versión 1.x (estable) enumera esto en /lib/resque.rb, y parece un mejor método para llamar que acceder directamente al módulo de trabajo dentro de Resque.

# This method is considered part of the `stable` API. 
    def enqueue_to(queue, klass, *args) 

Usar como tal, funciona a la perfección para mí.

Resque.enqueue_to(:my_queue, MyWorker, :my_argument) 
Cuestiones relacionadas