Grade de Eventos do Azure: CloudEvents, filtros, repetições e eventos personalizados de IA
Substitua sondagens por fluxos de IA orientados a eventos que encaminham CloudEvents de sistema e personalizados por assinaturas filtradas, entrega push confiável ou pull controlada, políticas de repetição, recuperação de dead-letter, monitoramento e publicação segura.
Tempo de estudo sugerido: 125 minutos • Nível intermediário • Reescrita autoral completa com versão resumida de cada tópico, avaliação comentada e laboratório guiado em Python
Por João Ricardo Dutra••Conteúdo autoral completo
1. Cenário de IA orientado a eventos e objetivos
Uma plataforma de moderação recebe imagens e textos no , gera embeddings, executa classificadores e encaminha resultados de risco para revisores. Consultar continuamente cada origem e etapa desperdiça solicitações, retarda reações, aumenta o acoplamento e piora nos picos. O fluxo precisa de um sinal leve quando dados chegam, a inferência termina, um modelo muda ou uma etapa entrega trabalho à próxima.
A do ( ) fornece essa camada de roteamento. O capítulo aborda modelagem, tópicos, modos de entrega, filtros, falhas transitórias, dead-letter, observabilidade e publicação por ou .
Reconhecer eventos, origens, tópicos, assinaturas e manipuladores em um fluxo de IA.
Escolher tópicos do sistema, personalizados ou de e entrega push ou pull.
Criar interoperáveis com tipos, assuntos e dados compactos.
Configurar filtros, repetições, dead-letter, lotes e monitoramento.
Publicar com segurança usando ,, Python ou .
Resumo do tópico
A substitui a sondagem por notificações explícitas e roteáveis, permitindo que cada etapa de IA reaja de modo independente.
2. Entenda o modelo de roteamento
A é um serviço gerenciado de publicação e assinatura com baixa latência e operações cobradas conforme o uso. Um evento é um fato compacto sobre uma mudança, não o recurso completo. Uma origem publica no tópico, a assinatura seleciona correspondências e o manipulador executa a reação. ,,,, aplicações personalizadas e parceiros podem ser origens.
Componentes fundamentais
Componente
Responsabilidade na solução de IA
Evento
Descreve uma mudança discreta com identidade, tipo, origem, horário, assunto e dados pequenos
Origem
Produz a mudança, como upload, inferência concluída ou validação de modelo
Tópico
Delimita publicação e roteamento de eventos relacionados
Assinatura de evento
Liga um tópico a um destino e pode aplicar filtros
Manipulador
Inicia processamento, notificação, auditoria ou orquestração
Diagrama autoral: uma publicação é avaliada por assinaturas independentes e entregue apenas aos manipuladores cujos filtros correspondem.
Resumo do tópico
Separe o fato, o produtor, o tópico, cada filtro e cada reação para obter baixo acoplamento.
3. Escolha tópicos do sistema, personalizados ou de
Seleção de tópico
Tipo
Publicador e uso
Tópico do sistema
Representa eventos de um recurso do , como Microsoft..BlobCreated; a aplicação assina, mas não publica com chave de
Tópico personalizado
Expõe um para eventos definidos pela aplicação, como InferenceCompleted ou ModelRetrained, com entrega push
Tópico de
Usa em um e aceita consumo push ou pull, além de recursos como integração MQTT
Use eventos do sistema para estado da plataforma, personalizados para marcos da aplicação e tópicos de quando o consumidor precisar controlar o pull, usar privado ou concentrar recursos no . A moderação pode começar com BlobCreated e, depois da inferência, publicar com.contoso.ai.ContentClassified.
Resumo do tópico
Associe o tópico ao publicador e ao consumo: recurso do , marco da aplicação ou com push e pull.
4. Aplique padrões e selecione manipuladores
O processamento reativo começa quando os dados chegam. A coordenação de publica somente em limites significativos, como embeddings concluídos ou índice atualizado. Eventos de ciclo de vida comunicam treinamento, validação, promoção e implantação de modelos. Assim, auditoria, notificações ou qualidade podem assinar sem alterar o produtor.
Destinos push comuns
Manipulador
Uso adequado
Reações curtas e orquestração sem servidor
volumoso e análise posterior
Fila ou tópico do
Comandos duráveis, nivelamento de carga e processamento ordenado
Aplicação personalizada com público validado
Fila do do
simples e durável de trabalho
No push, a envia assim que há correspondência. O pull, disponível para tópicos de , deixa o consumidor receber no próprio ritmo e confirmar, liberar, rejeitar ou renovar bloqueios. Prefira pull quando não for possível expor , quando houver conectividade privada ou quando a taxa de entrada precisar ser controlada.
Diagrama autoral: tópicos do sistema e personalizados acionam destinos push; um tópico de também permite pull e liquidação controlada.
Resumo do tópico
Publique transições relevantes, use push para reação imediata e pull de quando o consumidor precisar controlar tempo, taxa ou rede.
5. Padronize com 1.0
A aceita o esquema original e 1.0. é recomendado para novos projetos porque padroniza o contexto, atravessa produtos e protocolos e permite atributos de extensão. O esquema continua disponível por compatibilidade. Entrada no formato pode sair como , mas entrada não pode virar saída porque o esquema antigo não representa extensões.
Compatibilidade de esquemas
Entrada
Saída
Suporte
Esquema
Esquema
Sim
Esquema
1.0
Sim
1.0
1.0
Sim
1.0
Esquema
Não
Resumo do tópico
Adote 1.0 de ponta a ponta e confirme a compatibilidade antes de criar tópicos e assinaturas.
6. Projete úteis para operações de IA
CloudEvent exige specversion, type, source e id. O tipo em reverso nomeia o fato, source identifica o produtor e id distingue a ocorrência. Subject, time, datacontenttype e data fornecem roteamento e contexto. Subject funciona bem como caminho hierárquico, por exemplo //moderation/image-classifier.
Mantenha data compacto: IDs de correlação, modelo e versão, duração, status, resumo da decisão e protegida do resultado. Tipos úteis incluem InferenceCompleted, EmbeddingsRefreshed, BatchProcessingStarted, AnomalyDetected, ModelRetrained e ContentClassified. Não publique toda mudança interna; publique fatos que outro componente possa usar.
Resumo do tópico
Crie eventos pequenos e autodescritivos para fatos relevantes e referencie resultados grandes.
7. Filtre por tipo de evento e assunto
A assinatura pode limitar included event types aos fatos compreendidos pelo destino. Prefixos e sufixos de subject roteiam caminhos, famílias de arquivos, locatários ou etapas sem abrir data. Quando combinadas, as condições de tipo e assunto precisam corresponder.
A nomenclatura é infraestrutura operacional. Defina convenções de tipo e subject antes de multiplicar produtores, preserve maiúsculas e minúsculas e teste casos positivos e negativos. O tipo informa o que ocorreu; o assunto indica onde ou para qual objeto ocorreu.
Resumo do tópico
Use type para semântica e prefixo ou sufixo de subject para caminhos, reduzindo trabalho desnecessário.
8. Encaminhe dados com filtros avançados
Filtros avançados examinam contexto ou campos de data. Entre os operadores estão StringIn, StringContains, StringBeginsWith, NumberGreaterThan, BoolEquals e IsNotNull. Uma assinatura pode usar StringIn em data.status para flagged ou review; outra pode selecionar confiança mínima ou versão do modelo.
Há até 25 filtros avançados e 25 valores no total, com 512 caracteres por string. Cláusulas distintas usam AND; valores de uma condição representam alternativas. Chaves com ponto não podem ser escapadas. Filtros roteiam, mas não autorizam: o manipulador ainda valida evento, esquema e permissão.
Resumo do tópico
Filtros avançados evitam processamento inútil, mas exigem contrato estável, respeito aos limites e validação no destino.
9. Confirme corretamente a entrega push
No push, a envia . Apenas 200, 201, 202, 203 e 204 confirmam sucesso. O tem 30 segundos para responder; o tempo excedido falha. A carga é uma matriz com um evento por padrão. Como a entrega é pelo menos uma vez, podem surgir duplicatas e o destino deve tornar efeitos idempotentes pelo id do evento ou por chave de negócio.
Comportamento de respostas
Resposta
Ação
200-204
Entrega concluída
400, 403 ou 413
Falha permanente; não repetir
401 ou 404 em de recurso do
Repetir após pelo menos cinco minutos
408
Repetir após pelo menos dois minutos
503
Repetir após pelo menos 30 segundos
Outra falha
Aplicar espera exponencial padrão
Use 503 para indisponibilidade temporária, não 400. Um 401 de não é repetido; a repetição tardia especial de 401 e 404 vale para de recursos do . Se a inferência durar mais de 30 segundos, grave o trabalho aceito, responda 202 e conclua de modo assíncrono.
Resumo do tópico
Responda rapidamente com 2xx adequado, classifique falhas transitórias e garanta idempotência.
10. Configure vida útil e limite de tentativas
A repetição usa espera exponencial aleatorizada. A sequência nominal é 10 segundos, 30 segundos, 1 minuto, 5 minutos, 10 minutos, 30 minutos, 1 hora, 3 horas, 6 horas e, depois, a cada 12 horas até a janela de 24 horas. A assinatura define máximo de 1 a 30 tentativas e de 1 a 1.440 minutos; os padrões são 30 e 1.440. O primeiro limite atingido encerra a entrega, e a agenda não é configurável.
curto pode expirar antes de um limite alto de tentativas. Escolha ambos pela validade de negócio, tempo de recuperação e capacidade do destino. Tentativas podem ser puladas se o aparentar indisponibilidade. Se ele responder em até três minutos, a remoção em melhor esforço pode concorrer com outra tentativa e ainda produzir duplicata.
Ajuste e tentativas juntos; o primeiro que expirar vence e a idempotência continua obrigatória.
11. Preserve eventos não entregues com dead-letter
Dead-letter fica desabilitado até a assinatura apontar para um contêiner existente do . Ao esgotar tentativas ou , a pode salvar o evento e propriedades como deadLetterReason (MaxDeliveryAttemptsExceeded ou MaxRetryDurationExceeded), deliveryAttempts, lastDeliveryOutcome (NotFound, TimedOut, Busy ou Forbidden), publishTime e lastDeliveryAttemptTime. Sem destino, o evento expirado é descartado.
Trate o contêiner como fila operacional: proteja, retenha, alerte, investigue padrões como NotFound ou TimedOut, corrija a causa e republique por processo idempotente. Uma assinatura no próprio contêiner pode disparar notificação ou reprocessamento.
Diagrama autoral: sucessos são confirmados, falhas transitórias repetem até o limite e eventos esgotados seguem para Blob protegido para investigação e .
Resumo do tópico
Dead-letter gera evidência recuperável, mas precisa de responsável, alerta, diagnóstico, retenção e controlado.
12. Agrupe saídas sem comprometer a confiabilidade
O lote de saída vem desligado. A assinatura aceita de 1 a 5.000 eventos por lote e tamanho preferencial de 1 a 1.024 KB. São metas em melhor esforço: a não espera completar o lote, e um evento grande pode superar o tamanho preferido.
A semântica é tudo ou nada. O processa o lote inteiro e devolve um resultado em até 30 segundos; não há sucesso parcial, e a falha repete o lote. Selecione tamanho compatível com o destino e mantenha idempotência por evento.
Resumo do tópico
Lotes reduzem , mas exigem processamento integral dentro do prazo e tolerância à reentrega completa.
13. Monitore fluxo e resultados
O expõe sucesso de entrega, tentativas com falha, eventos correspondentes, descartados e enviados para dead-letter. Relacione essas métricas à latência, disponibilidade e do destino, à capacidade do modelo e à taxa de publicação. Falha conta tentativas, não somente perdas finais.
Alerte para aumento de dead-letter, falhas persistentes, descartes inesperados, desaparecimento de correspondências e queda de sucesso. Registre id, type, subject, correlação, assinatura, manipulador e resultado sem incluir segredos ou dados sensíveis.
Resumo do tópico
Observe publicação, correspondência, tentativas, sucesso, descarte e dead-letter em conjunto.
14. Autentique publicadores com privilégio mínimo
Publicadores podem usar chave, SAS ou . Em produção no , prefira e conceda Data Sender no menor escopo do tópico. Essa função fornece Microsoft.EventGrid/events/send/action sem segredo embutido.
A chave usa aeg-sas-key e serve para laboratório. SAS reduz tempo e recurso, mas continua sendo segredo. usa , pode aplicar políticas de e elimina rotação de chave pela aplicação. A identidade de entrada é distinta da identidade que a usa para entregar a serviços .
Resumo do tópico
Em produção, combine e Data Sender; limite e gire chaves ou SAS quando necessários.
15. Publique com o Python
O pacote -eventgrid oferece EventGridPublisherClient e .core.messaging fornece CloudEvent. O cliente aceita AzureKeyCredential, AzureSasCredential ou credencial de como DefaultAzureCredential e envia um evento ou lista homogênea. Para tópico de , forneça o contexto exigido pela atual.
import os
from azure.core.messaging import CloudEvent
from azure.eventgrid import EventGridPublisherClient
from azure.identity import DefaultAzureCredential
client = EventGridPublisherClient(
os.environ["EVENTGRID_TOPIC_ENDPOINT"],
DefaultAzureCredential(),
)
event = CloudEvent(
type="com.contoso.ai.InferenceCompleted",
source="/services/content-moderation",
subject="/pipelines/moderation/image-classifier",
data={
"requestId": "req-78901",
"modelName": "content-classifier",
"status": "completed",
"resultLocation": "https://results.example/output/req-78901.json",
},
)
client.send(event) # A list publishes a batch of one event type.
Reutilize o cliente, valide os dados, propague correlação e publique em pontos naturais: inferência concluída, promoção, anomalia ou transição. Envio bem-sucedido significa que a aceitou o evento, não que todos os destinos terminaram.
Resumo do tópico
O cuida da serialização e autenticação; o aplicativo mantém contratos, marcos e a distinção entre aceitação e processamento.
16. Publique por e reutilize padrões
Tópico personalizado também recebe . Para CloudEvent estruturado, use application/+ e autentique com do , aeg-sas-key ou SAS. Resposta 200 confirma aceitação; inválido, credencial errada ou esquema incompatível retorna outro status.
IDs, modelo e versão, duração, status, do resultado e resumo
Modelo atualizado
Versão, métricas, do artefato, promoção e destino
Transição de
Run ID, etapa, status, referências de entrada e saída, duração e próxima etapa
Resumo do tópico
é portátil, mas deve seguir os mesmos contratos versionados e regras de segurança do .
17. Laboratório guiado: roteie eventos de moderação
O exercício cria e tópico, assinaturas para conteúdo sinalizado, aprovado e todos os eventos, além de uma aplicação Flask que publica moderação. O consumidor pull recebe e confirma, libera ou rejeita. Reserve cerca de 30 minutos com assinatura do ,, Python 3.12 ou posterior e CLI do atual.
Baixe o projeto inicial, crie tópico de com e três assinaturas com filtros testados.
Publique eventos approved e flagged com type, subject, ID, modelo, status e referência.
Receba por pull, inspecione evento e propriedades, confirme sucesso, libere falha transitória e rejeite entrada inválida.
Prove que cada assinatura recebe somente o previsto e correlacione os .
Provoque uma falha controlada, observe repetição ou dead-letter e depois exclua o grupo de recursos.
Resumo do tópico
O laboratório valida publicação, filtros, liquidação pull e observabilidade com eventos reais.
18. Avaliação comentada e checklist de produção
Respostas da avaliação
Questão
Resposta
Motivo
Publicar conclusão de inferência definida pela aplicação
Tópico personalizado
A aplicação possui o evento e publica em
Filtrar caminho por prefixo ou sufixo
subject
O assunto é o caminho hierárquico
Cold start passa de 30 segundos
Repetição automática com espera exponencial
O volta a ser tentado dentro da política
Roteie flagged ou review em data.status
Filtro avançado StringIn
Avalia alternativas no campo
publicando em produção
com
Evita chave e usa mínimo
Antes da produção, confirme tipo de tópico, contrato e versão , taxonomia de type e subject, testes de filtro, escolha push/pull, validação do , comportamento em 30 segundos, idempotência, e tentativas, responsável por dead-letter, limites de lote, métricas e alertas, runbook de , identidade e , rede privada, cotas, custo e teste de carga.