webhook, sqs, rabbitmq, eventbridge) enviam cada evento correspondente para um destino seu. Um sink de pull mantém os eventos em um cursor do lado do servidor, que seu consumidor lê no ritmo dele. Esta página cobre o que seu consumidor deve fazer em cada caso.
Verificar uma assinatura de webhook
O Streaming Hub assina cada entrega de webhook com um HMAC sobre o timestamp da requisição e o corpo exato dela. A assinatura prova que a requisição veio do Streaming Hub e que ela não foi adulterada nem repetida. Dois headers carregam a assinatura:
A fórmula da assinatura é:
- Leia o corpo cru e o timestamp: verifique antes de fazer o parse do corpo, sobre os bytes exatos recebidos. Qualquer nova serialização muda os bytes e quebra a assinatura.
- Verifique o frescor: rejeite a requisição se o
X-Webhook-Timestampestiver a mais de 5 minutos de agora. Essa é a janela de proteção contra repetição. - Recalcule a assinatura: monte o
signature_inputcomo acima com seu signing secret e codifique o HMAC-SHA256 em hexadecimal. - Compare em tempo constante: compare seu
v1,sha256=<hex>com oX-Webhook-Signaturerecebido usando uma comparação de tempo constante (segura contra ataques de tempo). Rejeite quando não bater. - Responda: devolva
2xxapenas depois que a assinatura e o frescor passarem.
Tratar duas assinaturas durante a rotação
Quando você faz a rotação de um signing secret, o hub roda uma sobreposição de assinatura dupla de 24 horas. Durante a sobreposição, cada entrega carrega dois headers
X-Webhook-Signature, um assinado com o segredo novo e outro com o segredo anterior. O hub os envia como headers repetidos, então você pode migrar para o segredo novo sem perder nenhuma entrega.
Verifique contra os dois: recalcule a assinatura esperada com cada segredo que você tem no momento e aceite a requisição se qualquer uma das assinaturas recebidas bater. Depois de fazer o deploy do segredo novo e confirmá-lo, aposente o antigo.
Headers de correlação
Cada entrega de webhook também carrega um conjunto de headers de contexto
X-Lerian-*:
Deduplicar entregas
A entrega é pelo menos uma vez: o hub pode entregar o mesmo evento mais de uma vez, por novas tentativas ou por uma reentrega depois do reinício de um worker. Deduplique pelo
X-Lerian-Event-Id. Ele é estável em toda reentrega do mesmo evento, enquanto o X-Lerian-Delivery-Id difere por tentativa. Trate um X-Lerian-Event-Id que você já processou como duplicata: confirme com um 2xx e não processe de novo. Mantenha seu handler idempotente.
Responder rápido
Devolva um
2xx assim que tiver verificado e aceito o evento de forma durável. Depois faça o trabalho de verdade de forma assíncrona. O hub trata uma resposta lenta ou com falha como uma entrega falha. Uma entrega falha dispara a curva de novas tentativas. Se o destino continuar quebrado por tempo suficiente, o hub em algum momento desabilita automaticamente a subscription.
Puxar eventos
Uma subscription
pull não recebe push. Em vez disso, seu consumidor lê uma página dos eventos dela com:
seq, seu ceId (para dedup), seu tipo e seu payload. A resposta inclui um next_cursor.
A leitura é a confirmação (cursor como ack). Buscar uma página avança o cursor durável da subscription até o maior seq devolvido. Não existe chamada de ack separada. Ler uma página a confirma. Isso é monotônico, então nunca anda para trás.
Para paginar normalmente, retome a partir do next_cursor do servidor e pare quando uma página curta (com menos itens que seu limit) devolver null. Dois comportamentos a ter em mente:
- Um salto para frente com
?after=abre mão do intervalo. Passar?after=Nmaior que seu cursor atual avança o cursor além de tudo atéN. Os eventos pulados nunca são reentregues. Pedir eventos depois deNdeclara tudo atéNcomo consumido. Isso apenas pode acontecer com um salto para frente feito à mão, nunca pela paginação normal comnext_cursor. - Um salto para trás com
?after=nunca rebobina. Um?after=antigo ou menor que lê uma página mais velha não move o cursor para trás, porque o cursor apenas avança.
429 rate_limited. Faça backoff e tente de novo. Deduplique os eventos puxados pelo ceId, assim como um consumidor de webhook deduplica pelo X-Lerian-Event-Id.
Próximos passos
Gerenciar subscriptions
Crie subscriptions, faça a rotação de segredos e recupere destinos desabilitados.
Operar o Streaming Hub
Faça o deploy, configure e observe o hub.

