17 de Julho de 2025
Compartilhar contexto entre request e job
Como levar contexto útil de um fluxo síncrono para um job com rastreabilidade e fronteira clara.
Andrews Ribeiro
Founder & Engineer
3 min Intermediario Sistemas
O problema
Request entra.
O backend decide algo.
Depois dispara um job.
Nesse ponto, quase sempre existe contexto que ainda importa:
tenant_idcorrelation_id- origem do disparo
- prioridade
- versão de regra
- motivo operacional
O erro comum é não decidir isso direito.
Daí o sistema cai em um destes caminhos:
- variável global
- contexto implícito de framework
- singleton compartilhado
- job consultando metade do estado depois “porque consegue”
Tudo isso parece funcionar até a primeira investigação séria.
Modelo mental
Job não continua um request.
Job começa um novo momento de execução.
Então ele precisa receber contexto suficiente para:
- executar a ação
- ser auditável
- ser reprocessável
- ser investigável
Isso não significa carregar tudo.
Significa carregar o contexto certo.
Exemplo simples
Imagine um request que aprova um pedido e agenda emissão de nota.
O job de nota talvez precise:
order_idtenant_idcorrelation_idrequested_byissued_under_policy_version
Ele provavelmente não precisa:
- headers completos
- payload inteiro do request
- sessão inteira do usuário
Quando você manda contexto demais, o job vira caminhão de acoplamento.
Quando manda contexto de menos, o job vira caixa-preta.
O erro comum
O erro comum é achar que observabilidade resolve tudo depois.
Sem contexto mínimo no payload do job, você acaba com:
- logs sem ligação clara com a origem
- retries opacos
- reprocessamento sem semântica
- job que precisa refazer lookup demais para descobrir por que existe
Outro erro comum é serializar o request inteiro “para garantir”.
Isso geralmente só leva sujeira adiante.
O que normalmente ajuda
Ajuda separar o que o job precisa em três grupos:
- identidade do alvo
- identidade do contexto operacional
- metadado mínimo de rastreio
Na prática, costuma ficar algo como:
- ids relevantes
- correlation id
- tenant ou escopo
- motivo/versão/prioridade quando isso muda a execução
Isso costuma ser suficiente para manter clareza sem transportar lixo.
Como um senior pensa
Quem já precisou debugar fluxo assíncrono de verdade costuma perguntar:
- se esse job falhar amanhã, vou entender de onde ele veio?
- se eu reprocessar, consigo preservar o contexto importante?
- esse campo é necessário para executar ou só veio junto por conveniência?
- estou carregando dependência oculta do request para dentro do job?
Essa conversa reduz bastante gambiarra invisível.
Ângulo de entrevista
Esse tema aparece em backend, filas, jobs, tracing e incidentes.
O entrevistador quer ver se você entende:
- que job assíncrono precisa de contrato próprio
- que contexto demais e contexto de menos quebram coisas diferentes
- que rastreabilidade e reprocessamento dependem de propagação explícita
Resposta forte costuma soar assim:
“Eu não tentaria compartilhar contexto via variável global ou request local storage. Preferiria enviar no payload do job só a identidade do alvo e o contexto operacional mínimo, como tenant, correlation id e versão da política quando isso afetar a execução.”
Takeaway direto
Contexto entre request e job não deve ser mágico.
Deve ser explícito o suficiente para o fluxo continuar compreensível.
Resumo rápido
O que vale manter na cabeça
- Job assíncrono precisa de contexto explícito suficiente para operar e auditar, não de leitura mágica do request original.
- Correlation id, tenant, actor técnico e motivo do disparo costumam ser mais importantes do que replicar o payload inteiro.
- Contexto implícito demais piora debug, retry e reprocessamento.
- Propagação boa carrega só o necessário para continuidade, não uma sombra inteira do request.
Checklist de pratica
Use isto ao responder
- Consigo explicar qual contexto o job realmente precisa para executar e investigar?
- Esse contexto está explícito no payload do job ou escondido em singleton, thread local ou lookup frágil?
- Retry e reprocessamento continuam com rastreabilidade suficiente?
- Estou propagando só o essencial ou jogando o request inteiro para a fila por conveniência?
Você concluiu este artigo
Compartilhar esta página
Copie o link manualmente no campo abaixo.