Exemplos
Exemplo — Worker em Python
Um worker em segundo plano que processa mensagens de uma Fila Valkey gerenciada pela Zenifra.
Estrutura do projeto
worker/
├── worker.py
└── requirements.txtCódigo
requirements.txt
valkeyworker.py
import logging
import os
import time
from urllib.parse import urlparse
from valkey import Valkey
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger('worker')
# Conecta à Fila Valkey com TLS usando a conexão copiada do console
url = urlparse(os.environ['VALKEY_URL'])
client = Valkey(
host=url.hostname,
port=url.port,
username=url.username,
password=url.password,
ssl=True,
ssl_check_hostname=True,
decode_responses=True,
)
def process_message(message):
"""Processa uma única mensagem."""
logger.info(f"Processando: {message}")
time.sleep(2) # Simula trabalho
logger.info(f"Concluído: {message}")
return True
def main():
logger.info("Worker iniciado")
while True:
# Bloqueia até que uma mensagem esteja disponível
item = client.blpop('tasks', timeout=5)
if item:
process_message(item[1])
if __name__ == '__main__':
main()Configuração no console
Crie antes um projeto de Fila e guarde a conexão valkeys:// exibida na criação. Depois, crie o projeto HTTP do worker com:
| Campo | Valor |
|---|---|
| Origem do projeto | Repositório Git, com Provedor Git GitHub ou Forgejo |
| Runtime | Python, versão 3.13 |
| Comando Start | python worker.py |
| Exposição | Privado - sem rota pública |
| Porta | 8000 (o worker não recebe requisições HTTP) |
| Variável de ambiente | VALKEY_URL com a conexão da Fila |
Publicação
- Envie o código para um repositório GitHub ou Forgejo.
- No console, escolha Repositório Git em Origem do Projeto e GitHub ou Forgejo em Provedor Git e selecione o repositório.
- Selecione a branch principal, em Modo de deploy selecione Automático por branch e crie o projeto.
- Faça push na branch para publicar uma nova versão do worker automaticamente.
Enviar uma tarefa
# A partir de outro serviço ou da sua máquina local, com VALKEY_URL definida
valkey-cli -u "${VALKEY_URL/valkeys:/rediss:}" --tls LPUSH tasks '{"type": "email", "to": "[email protected]"}'Uma lista com BLPOP é simples, mas uma mensagem em processamento se perde se o worker parar no meio. Para confirmação explícita e reprocessamento, use Streams com consumer groups, como mostrado em Filas.
Logs esperados
INFO:worker:Worker iniciado
INFO:worker:Processando: {"type": "email", "to": "[email protected]"}
INFO:worker:Concluído: {"type": "email", "to": "[email protected]"}Próximos exemplos
Última atualização em