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.txt

Código

requirements.txt

valkey

worker.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:

CampoValor
Origem do projetoRepositório Git, com Provedor Git GitHub ou Forgejo
RuntimePython, versão 3.13
Comando Startpython worker.py
ExposiçãoPrivado - sem rota pública
Porta8000 (o worker não recebe requisições HTTP)
Variável de ambienteVALKEY_URL com a conexão da Fila

Publicação

  1. Envie o código para um repositório GitHub ou Forgejo.
  2. No console, escolha Repositório Git em Origem do Projeto e GitHub ou Forgejo em Provedor Git e selecione o repositório.
  3. Selecione a branch principal, em Modo de deploy selecione Automático por branch e crie o projeto.
  4. 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

Nessa página