Configurar filas e tópicos do Service Bus como manipuladores de eventos para eventos do Azure Event Grid

O Azure Event Grid suporta arquiteturas orientadas a eventos, encaminhando eventos das fontes para os handlers. Este artigo mostra-lhe como configurar filas e tópicos do Azure Service Bus como gestores de eventos para eventos do Event Grid. Configura a fila ou tópico para processar eventos em aplicações empresariais usando o portal Azure, CLI do Azure, Azure PowerShell ou API REST.

Pré-requisitos

Filas do Service Bus

Encaminhe eventos do Event Grid diretamente para filas do Service Bus para armazenamento temporário ou cenários de comando e controlo em aplicações empresariais.

Configure uma fila Service Bus usando o portal do Azure

No portal Azure, ao criar uma subscrição de evento, selecione Service Bus Queue como tipo de endpoint e depois selecione Select a endpoint para escolher uma Service Bus queue.

Captura de tela da configuração de uma fila do Service Bus como um manipulador de eventos na Grade de Eventos do Azure.

Nota

Se utilizar uma fila ou uma subscrição de tópico com sessão ativada como destino, defina a propriedade de sessão do evento utilizando uma propriedade de entrega com o nome de cabeçalho SessionId.

Configure uma fila Service Bus usando a CLI do Azure

Use o comando az eventgrid event-subscription create com --endpoint-type definido como servicebusqueue e --endpoint definido como /subscriptions/{AZURE SUBSCRIPTION}/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<NAMESPACE NAME>/queues/<QUEUE NAME>. Eis um exemplo:

az eventgrid event-subscription create \
    --name <my-event-subscription> \
    --source-resource-id /subscriptions/{SubID}/resourceGroups/{RG}/providers/Microsoft.EventGrid/topics/topic1 \
    --endpoint-type servicebusqueue \
    --endpoint /subscriptions/{SubID}/resourceGroups/TestRG/providers/Microsoft.ServiceBus/namespaces/ns1/queues/queue1

Você também pode usar o az eventgrid topic event-subscription comando para tópicos personalizados, o comando para tópicos do az eventgrid system-topic event-subscription sistema e o comando para tópicos de az eventgrid partner topic event-subscription create parceiros.

Configure uma fila Service Bus usando Azure PowerShell

Use o comando New-AzEventGridSubscription com -EndpointType definido como servicebusqueue e -Endpoint definido como /subscriptions/{AZURE SUBSCRIPTION}/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<NAMESPACE NAME>/queues/<QUEUE NAME>. Eis um exemplo:

New-AzEventGridSubscription -ResourceGroup MyResourceGroup `
            -TopicName Topic1 `
            -EndpointType servicebusqueue `
            -Endpoint /subscriptions/{SubID}/resourceGroups/TestRG/providers/Microsoft.ServiceBus/namespaces/ns1/queues/queue1 `
            -EventSubscriptionName EventSubscription1

Você também pode usar o comando New-AzEventGridSystemTopicEventSubscription para tópicos do sistema e o comando New-AzEventGridPartnerTopicEventSubscription para tópicos de parceiros.

Tópicos do Service Bus

Encaminhe eventos no Event Grid diretamente para tópicos do Service Bus para cenários de mensagens de comando e controlo.

Configure um tópico do Service Bus usando o portal do Azure

No portal Azure, ao criar uma subscrição de evento, selecione Service Bus Topic como tipo de endpoint e depois selecione Select a endpoint para escolher um tópico Service Bus.

Captura de ecrã de configurar um tópico do Service Bus como gestor de eventos no Azure Event Grid.

Configure um tópico do Service Bus usando a CLI do Azure

Use o comando az eventgrid event-subscription create com --endpoint-type definido como servicebustopic e --endpoint definido como /subscriptions/{AZURE SUBSCRIPTION}/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<NAMESPACE NAME>/topics/<TOPIC NAME>. Eis um exemplo:

az eventgrid event-subscription create \
    --name <my-event-subscription> \
    --source-resource-id /subscriptions/{SubID}/resourceGroups/{RG}/providers/Microsoft.EventGrid/topics/topic1 \
    --endpoint-type servicebustopic \
    --endpoint /subscriptions/{SubID}/resourceGroups/TestRG/providers/Microsoft.ServiceBus/namespaces/ns1/topics/topic1

Você também pode usar o az eventgrid topic event-subscription comando para tópicos personalizados, o comando para tópicos do az eventgrid system-topic event-subscription sistema e o comando para tópicos de az eventgrid partner topic event-subscription create parceiros.

Configure um tópico do Service Bus usando Azure PowerShell

Use o comando New-AzEventGridSubscription com -EndpointType definido como servicebustopic e -Endpoint definido como /subscriptions/{AZURE SUBSCRIPTION}/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<NAMESPACE NAME>/topics/<TOPIC NAME>. Eis um exemplo:

New-AzEventGridSubscription -ResourceGroup MyResourceGroup `
            -TopicName Topic1 `
            -EndpointType servicebustopic `
            -Endpoint /subscriptions/{SubID}/resourceGroups/TestRG/providers/Microsoft.ServiceBus/namespaces/ns1/topics/topic1 `
            -EventSubscriptionName EventSubscription1

Você também pode usar o comando New-AzEventGridSystemTopicEventSubscription para tópicos do sistema e o comando New-AzEventGridPartnerTopicEventSubscription para tópicos de parceiros.

Cabeçalhos de mensagens

Estas são as propriedades que você recebe nos cabeçalhos das mensagens:

Nome da propriedade Descrição
aeg-nome-subscrição Nome da subscrição do evento.
AEG-Contagem de entregas Número de tentativas efetuadas para o evento.
aeg-tipo de evento

Tipo do evento.

Pode ser um dos seguintes valores:

  • Validação da subscrição
  • Notificação
  • SubscriçãoEliminação
aeg-metadata-versão

Versão de metadados do evento.

Para o esquema de eventos da Grade de Eventos, essa propriedade representa a versão dos metadados e, para o esquema de eventos na nuvem, representa a versão da especificação.

aeg-data-versão

Versão de dados do evento.

Para o esquema de eventos da Grade de Eventos, essa propriedade representa a versão dos dados e, para o esquema de eventos na nuvem, ela não se aplica.

aeg-output-event-id ID do evento Event Grid.

Quando envia um evento para uma fila ou tópico do Service Bus como uma mensagem mediada, o messageid da mensagem mediada é um identificador interno do sistema.

O ID interno do sistema da mensagem mantém-se durante a reentrega do evento, para que possa evitar entregas duplicadas ativando a deteção de duplicados na entidade Service Bus. Defina a janela de deteção de duplicados na entidade do Service Bus para o tempo de vida (TTL) do evento ou para a duração máxima de repetição, consoante o que for mais longo.

Propriedades de entrega

Quando usa subscrições de eventos, pode configurar cabeçalhos HTTP para incluir nos eventos entregues. Esta funcionalidade suporta a definição de cabeçalhos personalizados que o destino exige. Pode definir cabeçalhos personalizados nos eventos entregues nas filas e tópicos do Azure Service Bus.

O Azure Service Bus suporta as seguintes propriedades de mensagem quando envia mensagens individuais.

Nome do cabeçalho Tipo de cabeçalho
MessageId Dinâmica
PartitionKey Estático ou dinâmico
SessionId Estático ou dinâmico
CorrelationId Estático ou dinâmico
Label Estático ou dinâmico
ReplyTo Estático ou dinâmico
ReplyToSessionId Estático ou dinâmico
To Estático ou dinâmico
ViaPartitionKey Estático ou dinâmico

Nota

  • O valor padrão de MessageId é a ID interna do evento Event Grid. Você pode substituí-lo. Por exemplo, use data.field.
  • Você só pode definir um SessionId ou MessageId.

Para obter mais informações, consulte Propriedades de entrega personalizadas.

Exemplos REST (para PUT)

Fila do Service Bus

{
    "properties": 
    {
        "destination": 
        {
			"endpointType": "ServiceBusQueue",
            "properties": 
            {
				"resourceId": "/subscriptions/<AZURE SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<SERVICE BUS NAMESPACE NAME>/queues/<SERVICE BUS QUEUE NAME>"
			}
		},
		"eventDeliverySchema": "EventGridSchema"
	}
}

Fila do Service Bus - entrega com identidade gerenciada

{
	"properties": {
        "deliveryWithResourceIdentity": 
        {
            "identity": 
            {
				"type": "SystemAssigned"
			},
            "destination": 
            {
				"endpointType": "ServiceBusQueue",
                "properties": 
                {
					"resourceId": "/subscriptions/<AZURE SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<SERVICE BUS NAMESPACE NAME>/queues/<SERVICE BUS QUEUE NAME>"
				}
			}
		},
		"eventDeliverySchema": "EventGridSchema"
	}
}

Tema do Service Bus

{
    "properties": 
    {
        "destination": 
        {
			"endpointType": "ServiceBusTopic",
            "properties": 
            {
				"resourceId": "/subscriptions/<AZURE SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<SERVICE BUS NAMESPACE NAME>/topics/<SERVICE BUS TOPIC NAME>"
			}
		},
		"eventDeliverySchema": "EventGridSchema"
	}
}

Tópico do Service Bus - entrega com identidade gerenciada

{
    "properties": 
    {
        "deliveryWithResourceIdentity": 
        {
            "identity": 
            {
				"type": "SystemAssigned"
			},
            "destination": 
            {
				"endpointType": "ServiceBusTopic",
                "properties": 
                {
					"resourceId": "/subscriptions/<AZURE SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<SERVICE BUS NAMESPACE NAME>/topics/<SERVICE BUS TOPIC NAME>"
				}
			}
		},
		"eventDeliverySchema": "EventGridSchema"
	}
}

Nota

Quando ocorre um failover para um namespace do Service Bus habilitado para Recuperação de Desastres Geográficos, o namespace secundário não emite eventos para a Grade de Eventos. Deve adicionar manualmente a subscrição do Event Grid para o namespace secundário.

Para uma lista de gestores de eventos suportados, consulte o artigo Gestores de Eventos .