Visão geral da integração do Barramento de Serviço com a Grade de Eventos

O Barramento de Serviço pode emitir eventos para a Grade de Eventos quando há mensagens em uma fila ou uma assinatura quando nenhum destinatário está presente. É possível criar assinaturas da Grade de Eventos para seus namespaces do Barramento de Serviço, escutar esses eventos e reagir aos eventos iniciando um receptor. Com esse recurso, você pode usar o Barramento de Serviço em modelos de programação reativos. O principal cenário que esse recurso permite é que as filas ou assinaturas do Barramento de Serviço que têm um baixo volume de mensagens não precisam ter um receptor que verifica continuamente a existência de mensagens.

Para habilitar o recurso, você precisa dos itens a seguir:

  • Um namespace Premium de Barramento de Serviço com pelo menos uma fila ou um tópico do Barramento de Serviço com pelo menos uma assinatura.
  • Acesso de colaborador para o namespace do Barramento de Serviço. Procure o namespace do Barramento de Serviço no portal do Azure, selecione Controle de Acesso (IAM) e a guia Atribuições de função. Verifique se você tem o acesso de colaborador no namespace.
  • Além disso, você precisa de uma assinatura da Grade de Eventos para o namespace do Barramento de Serviço. Essa assinatura recebe uma notificação da Grade de Eventos sobre mensagens a serem coletadas. Os assinantes típicos podem ser o recurso Aplicativos Lógicos do Serviço de Aplicativo do Azure, o Azure Functions ou um webhook em contato com um aplicativo Web. Em seguida, o assinante processa as mensagens.

19

Tipos de evento disponíveis

Barramento de Serviço emite os seguintes tipos de evento:

Tipo de evento Descrição
Microsoft.ServiceBus.ActiveMessagesAvailableWithNoListeners Gerado quando uma nova mensagem ativa chega em uma fila ou assinatura e não há receptores escutando.
Microsoft.ServiceBus.DeadletterMessagesAvailableWithNoListeners Gerado quando uma nova mensagem ativa chega em uma fila de mensagens mortas e não há ouvintes ativos.
Microsoft.ServiceBus.ActiveMessagesAvailablePeriodicNotifications Gerado a cada 30 segundos se houver mensagens ativas em uma fila ou assinatura, mesmo se houver ouvintes ativos nessa fila ou assinatura específica. Ele também é gerado quando a contagem de mensagens ativas faz a transição de 0 para um valor positivo para a fila ou a assinatura.
Microsoft.ServiceBus.DeadletterMessagesAvailablePeriodicNotifications Gerado a cada 30 segundos se houver mensagens na entidade de mensagens mortas de uma fila ou assinatura, mesmo se houver ouvintes ativos na entidade de mensagens mortas dessa fila ou assinatura específica. Ele também é gerado quando a contagem de mensagens de mortas faz a transição de 0 para um valor positivo da entidade de mensagens mortas da fila ou da assinatura.

Exemplo de evento

Mensagens ativas disponíveis sem ouvintes

Esse evento é gerado se houver mensagens ativas em uma fila ou assinatura, e nenhum receptor escutando.

[{
  "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 mortas disponíveis sem ouvintes

O esquema para um evento de fila de mensagens mortas é semelhante. Você tem pelo menos um evento por fila de mensagens mortas, que tem mensagens e receptores não ativos.

[{
  "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"
}]

Notificações periódicas disponíveis de mensagens ativas

Esse evento é gerado periodicamente se você tiver mensagens ativas na fila ou assinatura específica, mesmo se houver ouvintes ativos para essa fila ou assinatura 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"
}]

Notificações periódicas disponíveis sobre mensagens mortas

Esse evento será gerado periodicamente se você tiver mensagens mortas na fila ou assinatura específica, mesmo se houver ouvintes ativos na entidade de mensagens mortas dessa fila ou assinatura 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 Type Descrição
topic string Caminho de recurso completo para a origem do evento. Este campo não é gravável. A Grade de Eventos fornece esse valor.
subject string Caminho definido pelo publicador para o assunto do evento.
eventType string Um dos tipos de evento registrados para a origem do evento.
eventTime string A hora em que o evento é gerado com base na hora UTC do provedor.
id string Identificador exclusivo do evento.
data objeto Dados de eventos do armazenamento de blob.
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. Grade de Eventos define o esquema de propriedades de nível superior. A Grade de Eventos fornece esse valor.

O objeto de dados tem as seguintes propriedades:

Propriedade Type Descrição
namespaceName string O namespace do Barramento de Serviço onde está o recurso existente.
requestUri string O URI para a fila específica ou a assinatura que emite o evento.
entityType string O tipo de entidade de Barramento de Serviço que emite eventos (fila ou assinatura).
queueName string A fila de mensagens ativas se inscreve-se em uma fila. Valor nulo se usar tópicos / assinaturas.
topicName string O tópico da assinatura do Barramento de Serviço ao qual as mensagens ativas pertencem. Valor nulo se usar uma fila.
subscriptionName string A assinatura do Barramento de Serviço com as mensagens ativas. Valor nulo se usar uma fila.

Assinaturas da Grade de Eventos para namespaces do Barramento de Serviço

Há três maneiras de criar assinaturas da Grade de Eventos para namespaces do Barramento de Serviço:

  • Portal do Azure. Confira os tutoriais a seguir para saber como usar o portal do Azure para criar assinaturas da Grade de Eventos para eventos do Barramento de Serviço com os Aplicativos Lógicos do Azure e o Azure Functions como manipuladores.
  • CLI do Azure. O exemplo da CLI a seguir mostra como criar uma assinatura do Azure Functions para um tópico do sistema criado por um namespace do Barramento de Serviço.

    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. Veja 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>"
    

Quantos eventos são emitidos e com que frequência?

Se você tiver várias filas e tópicos ou assinaturas no namespace, terá pelo menos um evento por fila e um por assinatura. Os eventos serão emitidos imediatamente se não houver mensagens na entidade do Barramento de Serviço e uma nova mensagem chegar. Ou, os eventos serão emitidos a cada dois minutos, a menos que o Barramento de Serviço detecte um receptor ativo. A procura de mensagens não interrompe os eventos.

Por padrão, o Barramento de Serviço emite eventos para todas as entidades no namespace. Se você quiser obter eventos somente para entidades específicas, consulte a próxima seção.

Use filtros para limitar de onde obter eventos

Caso queira obter apenas eventos, por exemplo, de uma fila ou assinatura em seu namespace, use filtros Começa com ou Termina com fornecidos pela Grade de Eventos. Em algumas interfaces, os filtros são chamados de filtros Pré e Sufixo. Caso você queira obter eventos de várias, mas não todas, filas e assinaturas, é possível criar várias assinaturas diferentes da Grade de Eventos e fornecer um filtro para cada uma.

Próximas etapas

Consulte os seguintes tutoriais: