Panoramica dell'integrazione del bus di servizio di Azure in Griglia di eventi

Il bus di servizio può generare eventi in Griglia di eventi quando sono presenti messaggi in una coda o in una sottoscrizione quando non sono presenti ricevitori. È possibile creare sottoscrizioni di Griglia di eventi per gli spazi dei nomi del bus di servizio, restare in ascolto di tali eventi e quindi reagire a essi avviando un ricevitore. Questa funzionalità consente di usare il bus di servizio in modelli di programmazione reattivi. Il principale scenario di questa funzionalità è la possibilità, in caso di code e sottoscrizioni del bus di servizio con un volume ridotto di messaggi, di non avere un ricevitore che esegue costantemente il polling dei messaggi.

Per abilitare questa funzionalità, sono necessari gli elementi seguenti:

  • Spazio dei nomi Premium del bus di servizio con almeno una coda o un argomento del bus di servizio con almeno una sottoscrizione.
  • Accesso di tipo Collaboratore allo spazio dei nomi del bus di servizio. Passare allo spazio dei nomi del bus di servizio nella portale di Azure e quindi selezionare Controllo di accesso (IAM) e selezionare La scheda Assegnazioni di ruolo. Verificare di avere l'accesso allo spazio dei nomi.
  • Sottoscrizione di Griglia di eventi per lo spazio dei nomi del bus di servizio. Questa sottoscrizione riceve una notifica da Griglia di eventi che segnala la presenza di messaggi da prelevare. I sottoscrittori tipici potrebbero essere la funzionalità App per la logica di Servizio app di Azure, Funzioni di Azure o un webhook che contatta un'app Web. Il sottoscrittore elabora quindi i messaggi.

19

Tipi di evento disponibili

Il bus di servizio genera i tipi di eventi seguenti:

Tipo di evento Descrizione
Microsoft.ServiceBus.ActiveMessagesAvailableWithNoListeners Generato quando arriva un nuovo messaggio attivo in una coda o una sottoscrizione e non sono presenti ricevitori in ascolto.
Microsoft.ServiceBus.DeadletterMessagesAvailableWithNoListeners Generato quando un nuovo messaggio attivo arriva in una coda di messaggi non recapitabili e non sono presenti listener attivi.
Microsoft.ServiceBus.ActiveMessagesAvailablePeriodicNotifications Generato ogni 30 secondi se sono presenti messaggi attivi in una coda o in una sottoscrizione, anche se sono presenti listener attivi in tale coda o sottoscrizione specifica. Viene generato anche quando il conteggio dei messaggi attivi passa da 0 a un valore positivo per la coda o la sottoscrizione.
Microsoft.ServiceBus.DeadletterMessagesAvailablePeriodicNotifications Generato ogni 30 secondi se sono presenti messaggi nell'entità di una coda o di una sottoscrizione non recapitabili, anche se sono presenti listener attivi nell'entità lettera non recapitata di tale coda o sottoscrizione specifica. Viene generato anche quando il conteggio dei messaggi non recapitabili passa da 0 a un valore positivo per l'entità lettera non recapitata della coda o della sottoscrizione.

Evento di esempio

Messaggi attivi disponibili senza listener

Questo evento viene generato se in una coda o una sottoscrizione sono presenti messaggi attivi e nessun ricevitore è in ascolto.

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

Messaggi non recapitabili disponibili senza listener

Lo schema per un evento di coda di lettere non recapitabili è simile. Si ottiene almeno un evento per coda di messaggi non recapitabili che contiene messaggi e nessun ricevitore attivo.

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

Messaggi attivi disponibili notifiche periodice

Questo evento viene generato periodicamente se si hanno messaggi attivi nella coda o nella sottoscrizione specifici, anche se sono presenti listener attivi per tale coda o sottoscrizione specifica.

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

Messaggi di lettera non recapitabili disponibili notifiche periodiche

Questo evento viene generato periodicamente se sono presenti messaggi inattivi nella coda o nella sottoscrizione specifici, anche se sono presenti listener attivi nell'entità deadletter di tale coda o sottoscrizione specifica.

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

Proprietà degli eventi

Un evento presenta i seguenti dati di primo livello:

Proprietà Type Descrizione
topic string Percorso risorsa completo dell'origine evento. Questo campo non è scrivibile. Questo valore viene fornito da Griglia di eventi.
subject string Percorso dell'oggetto dell'evento definito dall'origine di pubblicazione.
eventType string Uno dei tipi di evento registrati per l'origine evento.
eventTime string Ora di generazione dell'evento in base all'ora UTC del provider.
id string Identificatore univoco dell'evento.
data object Dati relativi all'evento di archiviazione BLOB.
dataVersion string Versione dello schema dell'oggetto dati. La versione dello schema è definita dall'origine di pubblicazione.
metadataVersion string Versione dello schema dei metadati dell'evento. Lo schema delle proprietà di primo livello è definito da Griglia di eventi. Questo valore viene specificato da Griglia di eventi.

Di seguito sono elencate le proprietà dell'oggetto dati:

Proprietà Type Descrizione
namespaceName string Spazio dei nomi del bus di servizio in cui esiste la risorsa.
requestUri string URI della coda o della sottoscrizione specifica che crea l'evento.
entityType string Tipo di entità del bus di servizio che crea gli eventi (coda o sottoscrizione).
queueName string Coda con messaggi attivi in caso di sottoscrizione di una coda. Valore null se si usano argomenti/sottoscrizioni.
topicName string Argomento a cui appartiene la sottoscrizione del bus di servizio con messaggi attivi. Valore null se si usa una coda.
subscriptionName string Sottoscrizione del bus di servizio con messaggi attivi. Valore null se si usa una coda.

Sottoscrizioni di Griglia di eventi per spazi dei nomi del bus di servizio

È possibile creare sottoscrizioni di Griglia di eventi per gli spazi dei nomi del bus di servizio in tre diversi modi:

  • Portale di Azure. Vedere le esercitazioni seguenti per informazioni su come usare portale di Azure per creare sottoscrizioni di Griglia di eventi per gli eventi del bus di servizio con App per la logica di Azure e Funzioni di Azure come gestori.
  • Interfaccia della riga di comando di Azure. Nell'esempio dell'interfaccia della riga di comando seguente viene illustrato come creare una sottoscrizione Funzioni di Azure per un argomento di sistema creato da uno spazio dei nomi del bus di servizio.

    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. Ecco un esempio:
    $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>"
    

Numero di eventi emessi e frequenza di emissione

Se si hanno più code e argomenti o sottoscrizioni nello spazio dei nomi, vengono generati almeno un evento per coda e un evento per sottoscrizione. Gli eventi vengono emessi immediatamente se non sono presenti messaggi nell'entità del bus di servizio e arriva un nuovo messaggio oppure vengono emessi ogni due minuti a meno che il bus di servizio non rilevi un ricevitore attivo. L'esplorazione dei messaggi non interrompe gli eventi.

Per impostazione predefinita, il bus di servizio emette eventi per tutte le entità nello spazio dei nomi. Se si vogliono ottenere eventi solo per entità specifiche, vedere la sezione successiva.

Usare i filtri per limitare le origini da cui è possibile ottenere gli eventi

Se si vogliono ottenere eventi solo da una coda o una sottoscrizione nello spazio dei nomi, ad esempio, è possibile usare i filtri Inizia con o Termina con offerti da Griglia di eventi, che in alcune interfacce sono denominati filtri per prefisso e suffisso. Se si vogliono ottenere eventi per più code e sottoscrizioni ma non per tutte, è possibile creare più sottoscrizioni di Griglia di eventi e specificare un filtro per ognuna.

Passaggi successivi

Vedere le esercitazioni seguenti: