Partilhar via


Entrega de envio de mensagens e repetição com tópicos de namespace

A entrega push de namespaces da Grade de Eventos fornece entrega durável. A Grade de Eventos tenta entregar cada mensagem pelo menos uma vez para cada assinatura correspondente imediatamente. Se o ponto de extremidade de um assinante não confirmar o recebimento de um evento ou se houver uma falha, a Grade de Eventos tentará novamente a entrega com base em uma agenda de repetição fixa e política de novas tentativas. Por padrão, a Grade de Eventos entrega um evento de cada vez ao assinante.

Nota

A Grade de Eventos não garante o pedido de entrega do evento, portanto, os assinantes podem recebê-los fora de ordem.

Subscrição do evento

Uma assinatura de evento é um recurso de configuração associado a um único tópico de namespace. Entre outras coisas, você usa uma assinatura de evento para definir os critérios de seleção de eventos para definir a coleção de eventos disponível para um assinante fora do conjunto total de eventos disponíveis em um tópico. Usando uma assinatura de evento, você também define o ponto de extremidade de destino para o qual os eventos são enviados. Além disso, uma assinatura de evento permite que você defina outras propriedades, como a contagem máxima de tentativas de entrega e o tempo de vida dos eventos, que definem o comportamento de tempo de execução da entrega de eventos.

Cronograma de novas tentativas

Quando a Grade de Eventos recebe um erro para uma tentativa de entrega de eventos, a Grade de Eventos decide se deve repetir a entrega com base no tipo do erro.

Se o erro retornado pelo ponto de extremidade inscrito for um erro relacionado à configuração que não pode ser corrigido com tentativas, a Grade de Eventos enviará o evento para um destino de letra morta configurado. Se nenhuma letra morta estiver configurada, o evento será descartado. Por exemplo, um evento é inscrito ou descartado quando o ponto de extremidade configurado na assinatura do evento não pode ser alcançado porque foi excluído. A repetição da entrega não acontece para as seguintes condições e erros:

Condições:

  • ArgumentException
  • TimeoutException
  • UnauthorizedAccessException
  • OperationCanceledException
  • SocketException |

Códigos de erro

  • 404 - NotFound
  • 401 - Unauthorized
  • 403 - Forbidden
  • 400 -BadRequest
  • 414 RequestUriTooLong

Nota

Se a letra morta não estiver configurada para um ponto de extremidade, os eventos serão descartados quando os erros ou condições acima acontecerem. Considere configurar a letra morta em sua assinatura de evento se não quiser que esses tipos de eventos sejam descartados. Os eventos com letra morta serão descartados quando o destino da letra morta não for encontrado.

Se a condição ou erro retornado pelo ponto de extremidade inscrito não estiver entre os das listas acima, a Grade de Eventos tentará novamente com base no esforço base usando o seguinte cronograma exponencial de tentativas de backoff:

  • 0 segundos (repetição imediata)
  • 10 segundos
  • 30 segundos
  • 1 minuto
  • 5 minutos

Após 5 minutos, a Grade de Eventos continua a tentar novamente a cada 5 minutos até que o evento seja entregue ou a contagem máxima de tentativas ou o tempo de transmissão do evento seja atingido.

Política de repetição

Você pode personalizar a política de repetição usando as duas propriedades de configuração de assinatura de evento a seguir. Um evento é descartado (sem letra morta configurada) ou com letra morta se qualquer uma das propriedades atingir seu limite configurado.

  • Contagem máxima de entrega - O valor deve ser um número inteiro entre 1 e 10. O valor predefinido é 10. Para entrega por push, essa propriedade define o máximo de tentativas de entrega.
  • Retenção - Esta propriedade também é conhecida como event time to live. O valor deve ser um valor de duração ISO 8601 com precisão de minutos. A partir do momento em que o evento foi publicado, essa propriedade define o período de tempo após o qual a mensagem expira. O valor mínimo permitido é "PT1M" (1 minuto). O valor máximo permitido é de 7 dias ou o tempo de retenção do tópico subjacente, o que for menor. O portal do Azure fornece uma experiência de usuário simples onde você especifica os dias, horas e minutos como inteiros.

Nota

Se você definir ambos Retention e Maximum delivery count, a Grade de Eventos os usará para determinar quando interromper a entrega de eventos. Qualquer um deles interrompe a entrega de eventos. Por exemplo, se você definir 20 minutos como retenção e 10 tentativas máximas de entrega, isso significa que quando um evento não é entregue após 20 minutos ou não é entregue após 10 tentativas, o que acontecer primeiro, o evento é escrito sem saída. No entanto, devido ao cronograma de novas tentativas, definir o número máximo de tentativas de entrega para 10 não tem impacto, pois os eventos serão gravados primeiro após 20 minutos. Isso se deve ao fato de que, no minuto 20, ocorre a tentativa de entrega #8 (0, 10s, 30s, 1m, 5m, 10m, 15m, 20m), mas nesse momento o evento é letra morta.

Criação de batches de saída

Quando você usa Webhooks como tipo de ponto de extremidade de destino, a Grade de Eventos assume como padrão o envio de cada evento individualmente para os assinantes. Você pode configurar a Grade de Eventos para eventos em lote para entrega para melhorar o desempenho HTTP em cenários de alta taxa de transferência. O envio em lote é desativado por padrão e pode ser ativado por assinatura de evento.

Ao usar Hubs de Eventos como tipo de ponto de extremidade de destino, a Grade de Eventos sempre agrupa eventos para obter a máxima eficiência e desempenho. Não há nenhuma configuração de política de lote disponível, pois por padrão a Grade de Eventos lida com o comportamento de envio em lote ao entregar aos Hubs de Eventos do Azure.

Política de lotes

A entrega em lote tem duas configurações:

  • Máximo de eventos por lote - Número máximo de eventos que a Grade de Eventos entrega por lote. O valor deve ser um número inteiro entre 1 e 5.000. Este número nunca é excedido. No entanto, menos eventos podem ser entregues se não houver mais eventos disponíveis no momento da entrega. A Grade de Eventos não atrasa eventos para criar um lote se houver menos eventos disponíveis.
  • Tamanho de lote preferido em kilobytes - Teto de destino para o tamanho do lote em kilobytes. O valor deve ser um número entre 1 e 1024. Semelhante aos eventos máximos, o tamanho do lote pode ser menor se eventos suficientes não estiverem disponíveis no momento da entrega. É possível que um lote seja maior do que o tamanho de lote preferido se um único evento for maior do que o tamanho preferido. Por exemplo, se o tamanho preferido for 4Kb e um evento de 10Kb for enviado para a Grade de Eventos, o evento de 10Kb será entregue em vez de ser descartado.

A entrega em lote é configurada por assinatura de evento por meio do portal, CLI, PowerShell ou SDKs.

Comportamento de envio em lote

  • Tudo ou nenhum

    A Grade de Eventos opera com semântica de tudo ou nada. Ele não suporta o sucesso parcial de uma entrega de lote. Os subscritores devem ter o cuidado de pedir apenas tantos eventos por lote quantos puderem razoavelmente processar em 30 segundos.

  • Lote otimista

    As configurações de política de envio em lote não têm limites estritos no comportamento de envio em lote e são respeitadas com base no melhor esforço. Em baixas taxas de eventos, você geralmente observa o tamanho do lote sendo menor do que o máximo de eventos solicitado por lote.

  • O padrão está definido como OFF

    Por padrão, a Grade de Eventos adiciona apenas um evento a cada solicitação de entrega. A maneira de ativar o envio em lote é definir uma das configurações mencionadas na política de lotes.

  • Valores predefinidos

    Não é necessário especificar ambas as configurações (Máximo de eventos por lote e Tamanho aproximado do lote em kilobytes) ao criar uma assinatura de evento. Se apenas uma configuração for definida, a Grade de Eventos usará valores padrão. Consulte as seções a seguir para obter os valores padrão e como substituí-los.

Portal do Azure

Essas configurações são exibidas na guia Recursos Adicionais da página Assinatura de Evento ou depois que a assinatura do evento é criada, na opção do menu Configuração ao acessar a Assinatura de Evento.

Captura de tela semeando a guia Recursos Adicionais da página Assinatura de Evento com a seção Lotes realçada.

Eventos de letra morta

Quando a Grade de Eventos não consegue entregar um evento dentro de um determinado período de tempo ou depois de tentar entregar o evento um determinado número de vezes, ele envia o evento para uma conta de armazenamento. Este processo é conhecido como dead-lettering. Grade de Eventos é um evento quando uma das seguintes condições é atendida.

  • O evento não é entregue dentro do período de tempo de vida (retenção definida na assinatura do evento).
  • O número de tentativas de entrega do evento excedeu o limite.

Se uma delas for atendida, o evento será descartado ou colocado em letra morta. Por padrão, a Grade de Eventos não ativa letras mortas. Para habilitá-lo, você deve especificar uma conta de armazenamento para armazenar eventos não entregues ao criar a assinatura do evento. Você lê os eventos dessa conta de armazenamento para resolver entregas.

A Grade de Eventos envia um evento para o local de letra morta quando ele tenta todas as suas tentativas de repetição. Se a Grade de Eventos receber um código de resposta 400 (Solicitação incorreta) ou 413 (Solicitação muito grande), ela agendará imediatamente o evento para letras mortas. Estes códigos de resposta indicam que a entrega do evento nunca terá sucesso.

O tempo de expiração é verificado APENAS na próxima tentativa de entrega agendada. Assim, mesmo que o tempo de vida expire antes da próxima tentativa de entrega programada, a expiração do evento é verificada apenas no momento da próxima entrega e, posteriormente, com letra morta.

Há um atraso de cinco minutos entre a última tentativa de entregar um evento e quando ele é entregue no local de letra morta. Esse atraso destina-se a reduzir o número de operações de armazenamento de Blob. Se o local da letra morta ficar indisponível por quatro horas, o evento será descartado.

Antes de definir o local de letra morta, você deve ter uma conta de armazenamento com um contêiner. Você fornece o ponto de extremidade para esse contêiner ao criar a assinatura do evento. O ponto de extremidade está no formato de: /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-name>/blobServices/default/containers/<container-name>

Talvez você queira ser notificado quando um evento for enviado para o local de letra morta. Para usar a Grade de Eventos para responder a eventos não entregues, crie uma assinatura de evento para o armazenamento de blob de letra morta. Sempre que o armazenamento de blob de letra morta recebe um evento não entregue, a Grade de Eventos notifica o manipulador. O manipulador responde com ações que você deseja executar para reconciliar eventos não entregues.

Ao configurar o dead-lettering, você precisa adicionar a identidade gerenciada à função RBAC (controle de acesso baseado em função) apropriada na conta de Armazenamento do Azure que conterá os eventos com letras mortas. Para obter mais informações, consulte Destinos suportados e funções do Azure.

Formatos de eventos de entrega

Esta seção fornece exemplos de eventos e eventos com letras mortas usando o esquema CloudEvents 1.0, o formato de metadados de mensagem suportado em tópicos de namespace.

Esquema do CloudEvents 1.0

Evento

{
    "id": "caee971c-3ca0-4254-8f99-1395b394588e",
    "source": "mysource",
    "dataversion": "1.0",
    "subject": "mySubject",
    "type": "fooEventType",
    "datacontenttype": "application/json",
    "data": {
        "prop1": "value1",
        "prop2": 5
    }
}

Evento de letra morta

[
  {
    "deadLetterProperties": {
      "deadletterreason": "Maximum delivery attempts was exceeded.",
      "deliveryattempts": 1,
      "deliveryresult": "Event was not acknowledged nor rejected.",
      "publishutc": "2023-11-01T20:33:51.4521467Z",
      "deliveryattemptutc": "2023-11-01T20:33:52.3692079Z"
    },
    "event": {
      "comexampleextension1": "value1",
      "id": "A234-1234-1234",
      "comexampleothervalue": "5",
      "datacontenttype": "text/xml",
      "specversion": "1.0",
      "time": "2018-04-05T17:31:00Z",
      "source": "/mycontext",
      "type": "com.example.someevent",
      "data": <your-event-data>
    }
  }
]

LastDeliveryOutcome: Liberdade condicional

Uma assinatura de evento é colocada em liberdade condicional pela Grade de Eventos por algum tempo se as entregas de eventos para o destino começarem a falhar. O tempo de teste é diferente para diferentes erros retornados pelo ponto de extremidade de destino. Se uma assinatura de evento estiver em liberdade condicional, os eventos podem ser cancelados ou descartados sem sequer tentar a entrega, dependendo do código de erro devido ao qual está em liberdade condicional.

Erro Duração da liberdade condicional
Ocupado 10 segundos
NotFound 5 minutos
Erro de soquete 30 segundos
ResoluçãoErro 5 minutos
Desativado 5 minutos
Total 5 minutos
Tempo Limite Excedido 10 segundos
Não autorizado 5 minutos
Proibido 5 minutos
InvalidAzureFunctionDestination 10 minutos

Nota

A Grade de Eventos usa a duração da liberdade condicional para um melhor gerenciamento da entrega e a duração pode mudar no futuro.

Estado de entrega de mensagens

A Grade de Eventos usa códigos de resposta HTTP para confirmar o recebimento de eventos.

Códigos de sucesso

A Grade de Eventos considera apenas os seguintes códigos de resposta HTTP como entregas bem-sucedidas. Todos os outros códigos de status são considerados entregas falhadas e serão repetidos ou digitados conforme apropriado. Quando a Grade de Eventos recebe um código de status bem-sucedido, ela considera a entrega concluída.

  • 200 OK
  • 201 Criado
  • 202 Aceito
  • 203 Informações não autorizadas
  • 204 Sem Conteúdo

Códigos de falha

Todos os outros códigos que não estão no conjunto acima (200-204) são considerados falhas e serão repetidos, se necessário. Alguns têm políticas de repetição específicas vinculadas a eles descritas abaixo, todos os outros seguem o cronograma de repetição padrão. É importante ter em mente que, devido à natureza altamente paralelizada da arquitetura da Grade de Eventos, o comportamento de repetição não é determinístico.

Código de estado Comportamento de repetição
400 Pedido Incorreto Não repetido
401 Não Autorizado Tente novamente após 5 minutos ou mais para os Pontos de Extremidade de Recursos do Azure
403 Proibido Não repetido
404 Não Encontrado Tente novamente após 5 minutos ou mais para os Pontos de Extremidade de Recursos do Azure
408 Tempo Limite do Pedido Tente novamente após 2 minutos ou mais
413 Entidade de Pedido Demasiado Grande Não repetido
503 Serviço Indisponível Tente novamente após 30 segundos ou mais
Todos os outros Tente novamente após 10 segundos ou mais

Propriedades de entrega personalizadas

As subscrições de eventos permitem-lhe configurar cabeçalhos HTTP incluídos em eventos entregues. Esse recurso permite que você defina cabeçalhos personalizados que são exigidos por um destino. Você pode configurar até 10 cabeçalhos ao criar uma assinatura de evento. Cada valor de cabeçalho não deve ser maior que 4.096 (4K) bytes. Você pode definir cabeçalhos personalizados nos eventos que são entregues para os seguintes destinos:

  • Webhooks
  • Hubs de Eventos do Azure

Próximos passos