drupal queue ejemplos

Manejo de Drupal Queue a fondo con ejemplo

Las colas en Drupal llamadas drupal queue son muy útiles ha la hora de realizar tareas pesadas en la web que ralentizarían mucho, por ejemplo, queremos que cuando se registre un usuario en nuestro sitio se cree su espacio personal con nuevos tipos de contenidos, o que todos los días a una hora determinada se realice una tarea concreta como enviar emails a los clientes, sabemos que esto ralentizaría muchísimo la web si se pusiera a enviar 20 emails cuando tenemos varios visitantes activos, en definitiva lo podemos usar para lo que queramos.

En un proyecto que he realizado, utilizo las Drupal queue para enviar cajas con viales al laboratorio o a los Drupal del ayuntamiento, pasando información en formato JSON entre dos Drupales, “hablaré de esto en otro post”.

Desde un Drupal central, se ordena enviar cajas hacia los ayuntamientos, cada caja contiene 50 viales con información interna, imaginaros si enviamos 5 cajas a la vez, se quedaría colgado el portal he incluso daría error por tiempo de memoria excedido. Eso lo he solucionado con las Drupal queue ya que cuando se realiza la acción de enviar la caja lo único que hago es meter cada vial en forma de array con la información que quiero pasar en una Drupal queue.  Cada hora salta la queue con el cron y con un tiempo máximo de ejecución de 2 minutos va cogiendo las queue una ha una y va ejecutando la función.

Ejemplo de código de drupal queue

Y como un ejemplo vale mas que mil palabras y supongo que habréis venido a por el código os lo comparto a continuación.

Tenemos que instalar los siguientes módulos:

Drupal queue ui link

Drupal queue link

Tabla donde se almacenan las drupal queue

Aquí os dejo el aspecto de la tabla donde se almacenan las queue, para que tengáis una idea mas clara.

drupal queue

Función que salta con el cron de drupal hook_cron_queue_info().

Primero de todo debemos utilizar el hook_cron_queue_info(), que saltará cuando sea llamado el cron. Es muy sencillo de entender, tiene un nombre de la Drupal queue, una callBack function que se ejecutará y un tiempo máximo de ejecución. Si tenemos varias queue irán activándose una tras otra.

Funciones disponibles en las drupal queue

Para manejar las Drupal queue tenemos varias funciones disponibles, os paso a resumir un poco.

$queue = DrupalQueue::get(‘nombre_de_la_queue’);

Con la función estática get() cogemos en un array todas los los items que tengan ese nombre y no tengan fecha de caducidad, “expired”. Nos devuelve un array de items con el item_id como key y la data como valor. Si no hay una queue con ese nombre el array está vacío y cuando creas un item lo guarda.

Ahora podemos aplicar varias funciones, entre las que están:

$queue->createItem($data);

Con esta función guardamos en la base de datos un nuevo item.

$num = $queue->numberOfItems();

Esta función nos devuelve el numero de items que tiene una queue con ese nombre.

$item = $queue->claimItem(10);

Esta función nos devuelve el primer itme que tenga esa queue poniendole una fecha de protección “expired” con lo que ya no podremos usarlo hasta pasado el tiempo de protección. Podemos pasarle un tiempo de protección en segundos, por defecto es una hora. Esto es muy útil, ya que si estamos cogiendo items de la queue en un boucle, los dejará inactivos durante un tiempo hasta que pase el tiempo de expired.

$queue->releaseItem($item);

Si queremos volver ha activar el item para mantenerlo en la queue después de haber usado claimItem con esta función le ponemos la fecha expired a 0.

$queue->deleteItem($item);

Y ya para terminar podemos eliminar el item directamente si lo queremos.

Para seguir con este post os ponfo un ejempo completo.

Esta sería la manera básica de manejar las Drupal queue, ahora bien, si queremos, podemos usar todas las funciones que mas arriba he descrito y tener un control mayor, un ejemplo de drupal queue.

Por que es bueno usar las colas en Drupal 7

Si usamos las drupal queue para realizar tareas comunes que tenga que realizar nuestro sitio Drupal estamos liberando de trabajo extra al servidor en los momentos de más uso que tenga nuestra web (durante el día) y dejando que el cron trabaje cuando el servidor tiene menos trabajo, durante la noche por ejemplo, así conseguimos desarrollar nuestro código como un experto en drupal.

Las queue  y el cron de Drupal son un aliado perfecto para páginas web donde es necesario realizar muchas tareas en segundo plano.

Si tienen alguna duda, a preguntar… 😉

 

 

 

Las colas en Drupal llamadas drupal queue son muy útiles ha la hora de realizar tareas pesadas en la web que ralentizarían mucho, por ejemplo, queremos que cuando se registre un usuario en nuestro sitio se cree su espacio personal con nuevos tipos de contenidos, o que todos los días a una hora determinada se realice una tarea concreta como enviar emails a los clientes, sabemos que esto ralentizaría muchísimo la web si se pusiera a enviar 20 emails cuando tenemos varios visitantes activos, en definitiva lo podemos usar para lo que queramos. En un proyecto que he realizado, utilizo…

Valora el post

Me gustaría conocer vuestra opinión sobre lo que escribo, esto me servirá para mejorar.

User Rating: Be the first one !

About ignacio Farré

Técnico en programación web, amigo de MVC y experto en Drupal, Symfony, Prestashop y bootstrap.

Check Also

Theme_preprocess_hook

Acceder a los datos del usuario en drupal 8 y a su imagen – Clases File, Node y User

Acceder a los datos del usuario en drupal 8 es muy fácil, en este artículo …

construir módulo en drupal 8

Cómo crear un módulo en drupal 8 con una página de ejemplo

Drupal en su última versión viene con muchos cambios y uno de ellos es la …

Formularios hechos con ajax en drupal

Ejemplo básico de formulario Ajax en drupal 7

Si queremos utilizar Drupal para realizar páginas web, hay algunas funcionalidades que son fundamentales saber hacer …