Valor de retorno de Sidekiq de un método retrasado
-
20-12-2019 - |
Pregunta
Utilizo Sidekiq para ejecutar un método retrasado en el controlador (mientras tanto uso Redis para actualizar una barra de progreso).Este método llama a un servidor, recupera los datos, realiza algunas manipulaciones y cálculos;entonces puede tomar un tiempo.
Por ejemplo, tengo este método:
data_and_status = MyModelName.delay.retrieve_data(params[:tags], "preview", current_user, params[:from], params[:to])
Este método debería devolver los datos manipulados, pero haciéndolo de esta manera. data_and_status
es un hash (supongo que es el ID de trabajo de Sidekiq).Los datos devueltos son muy grandes; desafortunadamente, realizar algo de almacenamiento en caché con Redis está fuera de discusión.
¿Cómo puedo recuperar un return value
de un trabajo retrasado (método)?
Solución
Dice que los datos devueltos (de su trabajo asincrónico) son muy grandes y que transmitirlos a través de Redis está fuera de discusión.Bueno, su trabajo sidekiq se ejecuta en un proceso diferente, posiblemente incluso en un servidor diferente, por lo que debe encontrar alguna forma entre procesos para transferir los datos; si no es su cola de mensajes (Redis), entonces la base de datos.
Por ejemplo: