RabbitMQ e quaisquer servidores de mensagens são ótimos.
Mas como você consegue iniciar um consumidor quando é necessário? Você não pode manter todo tipo de consumidor vivo para sempre! Esperançosamente, RabbitMQ fornece uma API integrada que pode ajudar a resolver o problema!
curl -i -u guest:guest http://localhost:15672/api/queues/your_vhost
Esta api retorna um json de itens contendo, entre outros:
{ "name" : "generateThumbnails", "consumers": 3, "messages_ready" : 23 }
Ao chamar esta api a cada minuto (tarefa Cron?), Você poderá saber quando uma fila tem mensagens esperando para serem consumidas sem nenhum consumidor para tratá-las, a partir daí você só terá que saber como iniciar um consumidor, com base no nome da fila.
Um recurso adicional para seu agendador: ao iniciar um consumidor, você pode incluir um mecanismo para limitar a vida do seu consumidor:
- Máximo de mensagens a serem tratadas
- Duração máxima do consumidor (não execute por mais de 2 horas, não importa quantas mensagens sejam tratadas)
- ou ambos 🙂
Isso deve levar você a uma solução de agendador de consumidor eficiente 🙂