Descrição geral de integração do Azure Service Bus para o Event Grid

O Service Bus pode emitir eventos para o Event Grid quando existem mensagens numa fila ou numa subscrição quando não existem recetores. Pode criar subscrições do Event Grid para os seus espaços de nomes do Service Bus, escutar estes eventos e, em seguida, reagir aos eventos ao iniciar um recetor. Com esta funcionalidade, pode utilizar o Service Bus em modelos de programação reativa. O cenário principal desta funcionalidade é as filas ou subscrições do Service Bus que têm um volume baixo de mensagens não precisarem de ter continuamente uma consulta de recetor para mensagens.

Para ativar a funcionalidade, precisa dos seguintes itens:

  • Um espaço de nomes Premium do Service Bus com, pelo menos, uma fila ou um tópico do Service Bus com, pelo menos, uma subscrição.
  • Acesso de contribuidor ao espaço de nomes do Service Bus. Navegue para o espaço de nomes do Service Bus no portal do Azure e, em seguida, selecione Controlo de acesso (IAM) e selecione Separador Atribuições de funções. Verifique se tem acesso de contribuidor ao espaço de nomes.
  • Além disso, precisa de uma subscrição do Event Grid para o espaço de nomes do Service Bus. Esta subscrição recebe uma notificação do Event Grid a indicar que existem mensagens a ser escolhidas. Os subscritores típicos podem ser a funcionalidade Logic Apps do Serviço de Aplicações do Azure, as Funções do Azure ou um webhook que contacta uma aplicação Web. Em seguida, o subscritor processa as mensagens.

19

Tipos de eventos disponíveis

O Service Bus emite os seguintes tipos de eventos:

Tipo de evento Descrição
Microsoft.ServiceBus.ActiveMessagesAvailableWithNoListeners Gerado quando uma nova mensagem ativa chega a uma fila ou subscrição e não existem recetores a escutar.
Microsoft.ServiceBus.DeadletterMessagesAvailableWithNoListeners Gerado quando uma nova mensagem ativa chega numa fila de cartas mortas e não há serviços de escuta ativos.
Microsoft.ServiceBus.ActiveMessagesAvailablePeriodicNotifications Gerado a cada 30 segundos se existirem mensagens ativas numa fila ou subscrição, mesmo que existam serviços de escuta ativos nessa fila ou subscrição específica. Também é gerado quando a contagem de mensagens ativas passa de 0 para um valor positivo para a fila ou subscrição.
Microsoft.ServiceBus.DeadletterMessagesAvailablePeriodicNotifications Gerado a cada 30 segundos se existirem mensagens na entidade de letra não entregue de uma fila ou subscrição, mesmo que existam serviços de escuta ativos na entidade de letra não entregue dessa fila ou subscrição específica. Também é gerado quando a contagem de mensagens sem cartas passa de 0 para um valor positivo para a entidade de letra não entregue da fila ou subscrição.

Evento de exemplo

Mensagens ativas disponíveis sem serviços de escuta

Este evento é gerado se tiver mensagens ativas numa fila ou subscrição, sem recetores à escuta.

[{
  "topic": "/subscriptions/{subscription-id}/resourcegroups/{your-rg}/providers/Microsoft.ServiceBus/namespaces/{your-service-bus-namespace}",
  "subject": "topics/{your-service-bus-topic}/subscriptions/{your-service-bus-subscription}",
  "eventType": "Microsoft.ServiceBus.ActiveMessagesAvailableWithNoListeners",
  "eventTime": "2018-02-14T05:12:53.4133526Z",
  "id": "dede87b0-3656-419c-acaf-70c95ddc60f5",
  "data": {
    "namespaceName": "YOUR SERVICE BUS NAMESPACE WILL SHOW HERE",
    "requestUri": "https://{your-service-bus-namespace}.servicebus.windows.net/{your-topic}/subscriptions/{your-service-bus-subscription}/messages/head",
    "entityType": "subscriber",
    "queueName": "QUEUE NAME IF QUEUE",
    "topicName": "TOPIC NAME IF TOPIC",
    "subscriptionName": "SUBSCRIPTION NAME"
  },
  "dataVersion": "1",
  "metadataVersion": "1"
}]

Mensagens de cartas não entregues disponíveis sem serviços de escuta

O esquema de um evento de fila de letras não entregues é semelhante. Obtém pelo menos um evento por fila de cartas não entregues que tenha mensagens e nenhum recetor ativo.

[{
  "topic": "/subscriptions/{subscription-id}/resourcegroups/{your-rg}/providers/Microsoft.ServiceBus/namespaces/{your-service-bus-namespace}",
  "subject": "topics/{your-service-bus-topic}/subscriptions/{your-service-bus-subscription}",
  "eventType": "Microsoft.ServiceBus.DeadletterMessagesAvailableWithNoListeners",
  "eventTime": "2018-02-14T05:12:53.4133526Z",
  "id": "dede87b0-3656-419c-acaf-70c95ddc60f5",
  "data": {
    "namespaceName": "YOUR SERVICE BUS NAMESPACE WILL SHOW HERE",
    "requestUri": "https://{your-service-bus-namespace}.servicebus.windows.net/{your-topic}/subscriptions/{your-service-bus-subscription}/$deadletterqueue/messages/head",
    "entityType": "subscriber",
    "queueName": "QUEUE NAME IF QUEUE",
    "topicName": "TOPIC NAME IF TOPIC",
    "subscriptionName": "SUBSCRIPTION NAME"
  },
  "dataVersion": "1",
  "metadataVersion": "1"
}]

Mensagens ativas disponíveis notificações periódicas

Este evento é gerado periodicamente se tiver mensagens ativas na fila ou subscrição específicas, mesmo que existam serviços de escuta ativos para essa fila ou subscrição específica.

[{
  "topic": "/subscriptions/<subscription id>/resourcegroups/DemoGroup/providers/Microsoft.ServiceBus/namespaces/<YOUR SERVICE BUS NAMESPACE WILL SHOW HERE>",
  "subject": "topics/<service bus topic>/subscriptions/<service bus subscription>",
  "eventType": "Microsoft.ServiceBus.ActiveMessagesAvailablePeriodicNotifications",
  "eventTime": "2018-02-14T05:12:53.4133526Z",
  "id": "dede87b0-3656-419c-acaf-70c95ddc60f5",
  "data": {
    "namespaceName": "YOUR SERVICE BUS NAMESPACE WILL SHOW HERE",
    "requestUri": "https://YOUR-SERVICE-BUS-NAMESPACE-WILL-SHOW-HERE.servicebus.windows.net/TOPIC-NAME/subscriptions/SUBSCRIPTIONNAME/$deadletterqueue/messages/head",
    "entityType": "subscriber",
    "queueName": "QUEUE NAME IF QUEUE",
    "topicName": "TOPIC NAME IF TOPIC",
    "subscriptionName": "SUBSCRIPTION NAME"
  },
  "dataVersion": "1",
  "metadataVersion": "1"
}]

Mensagens sem cartas disponíveis notificações periódicas

Este evento é gerado periodicamente se tiver mensagens deadletter na fila ou subscrição específicas, mesmo que existam serviços de escuta ativos na entidade deadletter dessa fila ou subscrição específica.

[{
  "topic": "/subscriptions/<subscription id>/resourcegroups/DemoGroup/providers/Microsoft.ServiceBus/namespaces/<YOUR SERVICE BUS NAMESPACE WILL SHOW HERE>",
  "subject": "topics/<service bus topic>/subscriptions/<service bus subscription>",
  "eventType": "Microsoft.ServiceBus.DeadletterMessagesAvailablePeriodicNotifications",
  "eventTime": "2018-02-14T05:12:53.4133526Z",
  "id": "dede87b0-3656-419c-acaf-70c95ddc60f5",
  "data": {
    "namespaceName": "YOUR SERVICE BUS NAMESPACE WILL SHOW HERE",
    "requestUri": "https://YOUR-SERVICE-BUS-NAMESPACE-WILL-SHOW-HERE.servicebus.windows.net/TOPIC-NAME/subscriptions/SUBSCRIPTIONNAME/$deadletterqueue/messages/head",
    "entityType": "subscriber",
    "queueName": "QUEUE NAME IF QUEUE",
    "topicName": "TOPIC NAME IF TOPIC",
    "subscriptionName": "SUBSCRIPTION NAME"
  },
  "dataVersion": "1",
  "metadataVersion": "1"
}]

Propriedades do evento

Um evento tem os seguintes dados de nível superior:

Propriedade Tipo Description
topic cadeia (de carateres) Caminho de recurso completo para a origem do evento. Este campo não é gravável. O Event Grid fornece este valor.
subject string Caminho definido pelo publicador para o assunto do evento.
eventType string Um dos tipos de eventos registados para esta origem de evento.
eventTime string A hora em que o evento é gerado com base na hora UTC do fornecedor.
id string Identificador exclusivo do evento.
data objeto Dados de eventos de armazenamento de blobs.
dataVersion string A versão do esquema do objeto de dados. O publicador define a versão do esquema.
metadataVersion string A versão do esquema dos metadados do evento. O Event Grid define o esquema das propriedades de nível superior. O Event Grid fornece este valor.

O objeto de dados tem as seguintes propriedades:

Propriedade Tipo Description
namespaceName cadeia (de carateres) O espaço de nomes do Service Bus no qual o recurso existe.
requestUri string O URI para a fila ou subscrição específica que emite o evento.
entityType string O tipo de entidade do Service Bus que emite eventos (fila ou subscrição).
queueName string A fila com mensagens ativas se subscrever uma fila. Valor nulo se utilizar tópicos/subscrições.
topicName string O tópico a que pertence a subscrição do Service Bus com mensagens ativas. Valor nulo se utilizar uma fila.
subscriptionName string A subscrição do Service Bus com mensagens ativas. Valor nulo se utilizar uma fila.

Subscrições do Event Grid para espaços de nomes do Service Bus

Pode criar subscrições do Event Grid para espaços de nomes do Service Bus de três formas diferentes:

  • portal do Azure. Veja os tutoriais seguintes para saber como utilizar portal do Azure para criar subscrições do Event Grid para eventos do Service Bus com o Azure Logic Apps e Funções do Azure como processadores.
  • CLI do Azure. O exemplo seguinte da CLI mostra como criar uma subscrição de Funções do Azure para um tópico de sistema criado por um espaço de nomes do Service Bus.

    namespaceid=$(az resource show --namespace Microsoft.ServiceBus --resource-type namespaces --name "<service bus namespace>" --resource-group "<resource group that contains the service bus namespace>" --query id --output tsv
    
    az eventgrid event-subscription create --resource-id $namespaceid --name "<YOUR EVENT GRID SUBSCRIPTION NAME>" --endpoint "<your_endpoint_url>" --subject-ends-with "<YOUR SERVICE BUS SUBSCRIPTION NAME>"
    
  • PowerShell. Eis um exemplo:
    $namespaceID = (Get-AzServiceBusNamespace -ResourceGroupName "<YOUR RESOURCE GROUP NAME>" -NamespaceName "<YOUR NAMESPACE NAME>").Id
    
    New-AzEVentGridSubscription -EventSubscriptionName "<YOUR EVENT GRID SUBSCRIPTION NAME>" -ResourceId $namespaceID -Endpoint "<YOUR ENDPOINT URL>” -SubjectEndsWith "<YOUR SERVICE BUS SUBSCRIPTION NAME>"
    

Qual o número e a frequência de eventos emitidos?

Se tiver várias filas e tópicos ou subscrições no espaço de nomes, obtém, pelo menos, um evento por fila e um por subscrição. Os eventos são emitidos imediatamente se não existirem mensagens na entidade do Service Bus e é entregue uma nova mensagem. Em alternativa, os eventos são emitidos a cada dois minutos, a menos que o Service Bus detete um recetor ativo. A navegação por mensagens não interrompe os eventos.

Por predefinição, o Service Bus emite eventos para todas as entidades no espaço de nomes. Se quiser receber eventos apenas para entidades específicas, veja a secção seguinte.

Utilizar filtros para limitar a origem dos eventos

Se quiser receber eventos apenas de, por exemplo, uma fila ou uma subscrição no seu espaço de nomes, pode utilizar os filtros Começa com ou Termina com fornecidos pelo Event Grid. Em algumas interfaces, os filtros são denominados Pre e Sufixo. Se quiser receber eventos para várias filas e subscrições, mas não todas, pode criar várias subscrições do Event Grid e fornecer um filtro para cada uma.

Passos seguintes

Veja os tutoriais seguintes: