Entenda os domínios de eventos para gerenciar tópicos do Event Grid
Um domínio de eventos fornece um ponto de extremidade para milhares de tópicos individuais relacionados ao mesmo aplicativo. Você pode pensar nisso como um meta-tópico que pode ter milhares de tópicos individuais. Ele fornece um ponto de extremidade de publicação para todos os tópicos no domínio. Ao publicar um evento, o editor deve especificar o tópico de destino no domínio a ser publicado. O editor pode enviar uma matriz ou um lote de eventos em que os eventos são enviados para tópicos diferentes no domínio. Consulte a seçãoEventos de publicação em uma seção de domínio para obter detalhes.
Os domínios também permitem que você controle a autorização e a autenticação de cada tópico, para que seja possível particionar seus locatários. Este artigo descreve como usar domínios de eventos para gerenciar o fluxo de eventos personalizados para várias organizações comerciais, clientes ou aplicativos. Use domínios de eventos para:
- Gerencie arquiteturas controladas por eventos multilocatário em escala.
- Gerenciar a autorização e a autenticação.
- Particionar tópicos sem gerenciar cada um individualmente.
- Evitar publicar individualmente em cada um dos pontos de extremidade do tópico.
Observação
O domínio de eventos não se destina a dar suporte ao cenário de transmissão em que um evento é enviado para um domínio e cada tópico no domínio recebe uma cópia do evento. Ao publicar eventos, o editor deve especificar o tópico de destino no domínio a ser publicado. Caso o editor queira publicar a mesma carga de evento em vários tópicos no domínio, o editor precisará duplicar o conteúdo do evento e alterar o nome do tópico e publicá-los na Grade de Eventos usando o ponto de extremidade de domínio, individualmente ou como um lote.
Caso de uso de exemplo
Os domínios de eventos são mais facilmente explicados usando um exemplo. Digamos que você execute o Maquinário de Construção da Contoso na fabricação de tratores, equipamentos de escavação e outras máquinas pesadas. Como parte da execução dos negócios, você envia informações em tempo real aos clientes sobre manutenção de equipamentos, integridade de sistemas e atualizações de contrato. Todas essas informações vão para vários pontos de extremidade, incluindo seu aplicativo, endpoints de clientes e outras infraestruturas que os clientes configuraram.
Domínios de eventos permitem que você modele a Contoso Construction Machinery como uma única entidade da Grade de Eventos. Cada um dos seus clientes é representado como um tópico dentro do domínio. A autenticação e a autorização são tratadas usando o Microsoft Entra ID. Cada um de seus clientes pode se inscrever no tópico deles e receber os eventos deles. O acesso gerenciado por meio do domínio do evento garante que eles possam acessar apenas o tópico deles.
Além disso, também fornece um ponto de extremidade exclusivo, em que todos os eventos de cliente podem ser publicados. A Event Grid cuidará de garantir que cada tópico esteja ciente dos eventos definidos para o locatário.
Gerenciamento de acesso
Com um domínio, você obtém autorização de granulação fina e controle de autenticação sobre cada tópico por meio do controle de acesso baseado em função do Azure (Azure RBAC). É possível usar essas funções para restringir cada locatário no aplicativo somente aos tópicos que você deseja permitir acesso. O Azure RBAC em domínios de eventos funciona da mesma maneira que o controle de acesso gerenciado no restante da Grade de Eventos e do Azure. Use o Azure RBAC para criar e impor definições de função personalizadas em domínios de eventos.
Funções internas
A Grade de Eventos tem duas definições de função interna para facilitar o uso do Azure RBAC com domínios de eventos. Essas funções são Colaborador de EventGrid EventSubscription e Leitor de EventGrid EventSubscription. Você atribui essas funções a usuários que precisam se inscrever em tópicos em seu domínio de evento. Você define a atribuição de função apenas para o tópico que os usuários precisam se inscrever. Para obter informações sobre essas funções, consulte Funções internas da grade de eventos.
Assinar tópicos
Assinar eventos para um tópico em um domínio de eventos é o mesmo que Criar uma assinatura de evento em um tópico personalizado ou inscrever-se em um evento de um serviço do Azure.
Importante
O tópico de domínio é considerado um recurso gerenciado automaticamente na Grade de Eventos. Você pode criar uma assinatura de evento no escopo do domínio sem criar o tópico de domínio. Nesse caso, a Grade de Eventos cria automaticamente o tópico de domínio em seu nome. É claro que você ainda pode optar por criar o tópico de domínio manualmente. Esse comportamento permite se preocupar com um recurso menor ao lidar com um grande número de tópicos de domínio. Quando a última assinatura para um tópico de domínio é excluída, o tópico de domínio também é excluído, mesmo que ele tenha sido criado automaticamente ou manualmente.
Assinaturas de escopo de domínio
Os domínios de eventos também permitem assinaturas de escopo de domínio. Uma inscrição de evento em um domínio de evento recebe todos os eventos enviados ao domínio, independentemente do tópico para o qual os eventos são enviados. As assinaturas de escopo de domínio podem ser úteis para fins de gerenciamento e auditoria.
Publicação em um domínio de evento
Quando você cria um domínio de evento, recebe um ponto de extremidade de publicação semelhante a se você criou um tópico na Grade de Eventos. Para publicar eventos em qualquer tópico em um domínio de eventos, envie os eventos para o ponto de extremidade do domínio da mesma forma que você faria para um tópico personalizado. A única diferença é que você deve especificar o tópico para o qual você gostaria que o evento seja entregue. Por exemplo, publicar a matriz de eventos a seguir enviaria o evento com "id": "1111"
para o tópico foo
, enquanto o evento com "id": "2222"
seria enviado para o tópico bar
.
Ao usar o esquema de eventos de nuvem, especifique o nome do tópico da Grade de Eventos no domínio como um valor para a propriedade source
. No exemplo a seguir, a propriedade source
é definida foo
para o primeiro evento e bar
para o segundo evento.
Caso queira usar um campo diferente para especificar o tópico pretendido no domínio, especifique o mapeamento de esquema de entrada ao criar o domínio. Por exemplo, caso esteja usando a API REST, use a propriedade properties.inputSchemaMapping quando mapear esse campo para properties.topic
. Caso esteja usando o SDK do .NET, use EventGridJsonInputSchemaMapping
. Outros SDKs também dão suporte ao mapeamento de esquema.
[{
"source": "foo",
"id": "1111",
"type": "maintenanceRequested",
"subject": "myapp/vehicles/diggers",
"time": "2018-10-30T21:03:07+00:00",
"data": {
"make": "Contoso",
"model": "Small Digger"
},
"specversion": "1.0"
},
{
"source": "bar",
"id": "2222",
"type": "maintenanceCompleted",
"subject": "myapp/vehicles/tractors",
"time": "2018-10-30T21:04:12+00:00",
"data": {
"make": "Contoso",
"model": "Big Tractor"
},
"specversion": "1.0"
}]
Os domínios de eventos tratam da publicação de tópicos para você. Em vez de publicar eventos para cada tópico gerenciado individualmente, você pode publicar todos os seus eventos no endpoint do domínio. A Grade de Eventos garante que cada evento seja enviado para o tópico correto.
Preços
Os domínios de eventos usam o mesmo preço de operações que todos os outros recursos na Grade de Eventos usam. As operações funcionam da mesma forma em domínios de eventos, como em tópicos personalizados. Cada entrada de um evento para um domínio de evento é uma operação e cada tentativa de entrega de um evento é uma operação.
Próximas etapas
Para saber como configurar domínios de eventos, criar tópicos, criar inscrições de eventos e publicar eventos, consulte Gerenciar domínios de eventos.