Qual é a diferença entre uma fila de tarefas e uma fila de mensagens no RabbitMQ?

5

Estamos usando o RabbitMQ como fila de mensagens e o Celery para filas de tarefas, e estou tentando envolver minhas filas.

Alguém poderia explicar as diferenças operacionais entre uma fila de tarefas e uma fila de mensagens para mim?

Até agora, entendo que a fila de mensagens será usada para dados reais, como uma mensagem de texto ou um snippet de log. Ele é colocado na fila de mensagens para que um trabalhador possa colecioná-lo e fazer algo com ele, seja aquele analisando, armazenando etc.

A parte da fila de tarefas me confunde, não sei por que ou quando ou o que isso faria?

Eu acharia que os trabalhadores (tarefas AKA?) estariam constantemente pesquisando na fila de mensagens o que fazer, então por que há uma fila de tarefas?

    
por Werner 18.02.2015 / 00:06

1 resposta

2

Não é bem assim, mas perto. A fila de tarefas no RabbitMQ é mais parecida com um agendador de tarefas, como o cron ou o Windows Task Scheduler .

The main idea behind Work Queues (aka: Task Queues) is to avoid doing a resource-intensive task immediately and having to wait for it to complete. Instead we schedule the task to be done later. We encapsulate a task as a message and send it to the queue. A worker process running in the background will pop the tasks and eventually execute the job. When you run many workers the tasks will be shared between them.

O RabbitMQ é um intermediário de mensagens, daí a terminologia. Então, operacionalmente, funcionalmente, não há muita diferença. Um é para mensagens, o outro é para tarefas / trabalhos. A única diferença real seria que as mensagens geralmente são processadas (e, portanto, apagadas da fila) o mais rápido possível, enquanto as tarefas geralmente são agendadas para um horário específico e, portanto, ficam "na fila" por algum tempo. Isso provavelmente não é uma diferença com a qual você terá que se preocupar muito no contexto da administração de sistemas.

    
por 18.02.2015 / 04:17