Valor de retorno do Sidekiq de um método atrasado
-
20-12-2019 - |
Pergunta
Eu uso o Sidekiq para executar um método atrasado no controlador (enquanto isso, uso o Redis para atualizar uma barra de progresso).Este método chama um servidor, recupera os dados, faz algumas manipulações e cálculos;então pode demorar um pouco.
Por exemplo, eu tenho este método:
data_and_status = MyModelName.delay.retrieve_data(params[:tags], "preview", current_user, params[:from], params[:to])
Este método deveria retornar os dados manipulados, mas fazendo desta forma data_and_status
é um hash (acho que é o Sidekiq-job-id).Os dados retornados são muito grandes, infelizmente, fazer algum cache com Redis está fora de questão.
Como posso recuperar um return value
de um trabalho atrasado (método)?
Solução
Você diz que os dados retornados (do seu trabalho assíncrono) são muito grandes e retransmiti-los via Redis está fora de questão.Bem, seu trabalho sidekiq é executado em um processo diferente, possivelmente até em um servidor diferente, então você deve encontrar alguma maneira entre processos de transferir os dados - se não sua fila de mensagens (Redis), então o banco de dados.
Por exemplo: