Tarefas (@task) vs stream workers (@worker)¶
No Strider existem dois mecanismos distintos. O nome “worker” aparece nos dois contextos, o que gera confusão. Este guia define um caminho por tipo e os comandos corretos.
Resumo rápido¶
| Tarefas em background | Stream worker (mensagens) | |
|---|---|---|
| Objetivo | Jobs enfileirados (delay), retries, filas nomeadas |
Consumir tópico Kafka (ou broker configurado), pipelines de eventos |
| Decorator / API | from strider.tasks import task → @task(queue="...") |
from strider.messaging import worker → @worker(topic="...") |
| Registro | strider.tasks.registry (ao importar o módulo) |
strider.messaging.workers (subclasse Worker ou @worker) |
| Arquivo sugerido | src/tasks.py ou src/apps/<app>/tasks.py |
src/workers.py ou módulo em workers_module |
| CLI para executar processo | strider worker (consome tasks.<fila>) |
strider runworker <Nome> ou strider runworker all |
| Listar o que registrou | strider tasks |
strider workers |
| Agendamento | strider scheduler + @periodic_task |
Não é o mesmo sistema; use cron externo ou lógica no tópico |
Regra mnemônica: se você usou @task, o processo é strider worker. Se usou @worker do strider.messaging, o processo é strider runworker.
Validação no registo (import do módulo)¶
Não são dois “mundos” com regras diferentes: o mesmo contrato é validado ao registar.
- Stream workers (
@workerou subclasse deWorker): validação emWorkerRegistrationError—input_topicobrigatório, nomes de tópico estilo Kafka, proibido prefixotasks.(reservado astrider.tasks),group_idnão vazio,concurrency/batch_*/ retry coerentes. ClasseWorkerseminput_topicnão regista (base intermédia; ver aviso em log). - Tarefas (
@task/@periodic_task):TaskRegistrationError— fila com nome seguro paratasks.<queue>, nomes únicos entre task e periodic,timeout≥ 1, etc.
Se o módulo falha ao importar, leia a mensagem da exceção — costuma indicar colisão de nome ou tópico inválido.
Checklist — “não está registrando”¶
Tarefas (@task)¶
- A função está decorada com
@task(import destrider.tasks, não destrider.messaging)? - O módulo onde ela está definido é importado antes de subir o worker? O
strider workerpassa a usar a mesma descoberta questrider tasks(tasks_module,tasks.py,src/**/tasks.py,app_module). - Rodou
strider taskse aparece a task na lista? task_enablede Kafka (ou broker de tasks) estão coerentes com Workers e tarefas?
Stream workers (@worker / Worker)¶
- Usa
from strider.messaging import worker, Worker? - O arquivo está em padrão descoberto por
strider runworker(ex.:workers.py,src/workers.py) ou emworkers_moduleno settings? - Rodou
strider workerse aparece o nome da classe ou do handler?
Evite¶
- Nomear tópico Kafka
taskspara stream worker se você já usa o sistema de tópicostasks.<fila>das tarefas em background — prefira nomes comobilling-events,imports-jobs, etc. - Colocar
@worker(messaging) no mesmo arquivo que@tasksem comentar qual CLI sobe cada coisa — pode funcionar, mas separartasks.pyeworkers.pydeixa o deploy mais claro.
Documentação relacionada¶
- Workers e configuração detalhada — settings, exemplos de
Workerem classe, batch, DLQ - Messaging — publicação, tópicos, brokers