Introducción a la integración de Azure Service Bus en Event Grid

Service Bus puede emitir eventos a Event Grid cuando haya mensajes en una cola o suscripción y no haya ningún receptor presente. Puede crear suscripciones de Event Grid para los espacios de nombres de Service Bus, escuchar estos eventos y reaccionar a ellos iniciando un receptor. Con esta característica, puede usar Service Bus en modelos de programación reactiva. El principal escenario de esta característica es que aquellas colas o suscripciones de Service Bus que tengan un bajo volumen de mensajes, no tienen que tener un sondeo de receptor de mensajes en todo momento.

Para habilitar la característica necesita los siguientes elementos:

  • Un espacio de nombres Premium de Service Bus con al menos una cola de Service Bus o un tema de Service Bus que tenga como mínimo una suscripción.
  • Acceso de colaborador al espacio de nombres de Service Bus. Vaya al espacio de nombres de Service Bus en Azure Portal, seleccione Control de acceso (IAM) y, a continuación, seleccione la pestaña Asignaciones de rol. Compruebe que dispone de acceso de colaborador al espacio de nombres.
  • Además, se necesita una suscripción a Event Grid para el espacio de nombres de Service Bus. Esta suscripción recibe una notificación de Event Grid que indica que hay mensajes que se deben recopilar. Los suscriptores típicos pueden ser la característica Logic Apps de Azure App Service, Azure Functions, o un webhook que se ponga en contacto con una aplicación web. El suscriptor, a continuación, procesa los mensajes.

19

Tipos de eventos disponibles

Service Bus emite los siguientes tipos de eventos:

Tipo de evento Descripción
Microsoft.ServiceBus.ActiveMessagesAvailableWithNoListeners Se genera cuando llega un nuevo mensaje activo a una cola o suscripción y no hay receptores que escuchen.
Microsoft.ServiceBus.DeadletterMessagesAvailableWithNoListeners Se genera cuando llega un nuevo mensaje activo a una cola de mensajes fallidos y no hay clientes de escucha.
Microsoft.ServiceBus.ActiveMessagesAvailablePeriodicNotifications Se genera cada 30 segundos si hay mensajes activos en una cola o suscripción, aunque haya clientes de escucha activos en esa cola o suscripción específica. También se genera cuando el recuento de mensajes activos pasa de 0 a un valor positivo para la cola o suscripción.
Microsoft.ServiceBus.DeadletterMessagesAvailablePeriodicNotifications Se genera cada 30 segundos si hay mensajes en la entidad de mensajes con problemas de entrega de una cola o suscripción, aunque haya clientes de escucha activos en la entidad de mensajes con problemas de entrega de esa cola o suscripción específica. También se genera cuando el recuento de mensajes con problemas de entrega pasa de 0 a un valor positivo para la entidad de mensajes con problemas de entrega de la cola o suscripción.

Evento de ejemplo

Mensajes activos disponibles sin agentes de escucha

Este evento se genera si hay mensajes activos en una cola o suscripción y no hay receptores a la escucha.

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

Mensajes fallidos disponibles sin clientes de escucha

El esquema para un evento de cola de mensajes fallidos es similar. Obtiene como mínimo un evento por cada cola de mensajes fallidos que contiene mensajes y ningún receptor activo.

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

Notificaciones periódicas de mensajes activos disponibles

Este evento se genera periódicamente si tiene mensajes activos en la cola o suscripción específica, aunque haya agentes de escucha activos de esa cola o suscripción 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"
}]

Notificaciones periódicas de mensajes fallidos disponibles

Este evento se genera periódicamente si tiene mensajes fallidos en la cola o suscripción específica, aunque haya agentes de escucha activos en la entidad fallida de esa cola o suscripción 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"
}]

Propiedades de evento

Un evento tiene los siguientes datos de nivel superior:

Propiedad Tipo Descripción
topic string Ruta de acceso completa a los recursos del origen del evento. En este campo no se puede escribir. Event Grid proporciona este valor.
subject string Ruta al asunto del evento definida por el anunciante.
eventType string Uno de los tipos de eventos registrados para este origen de eventos.
eventTime string La hora de generación del evento en función de la hora UTC del proveedor.
id string Identificador único para el evento
data object Datos de eventos de Blob Storage.
dataVersion string Versión del esquema del objeto de datos. El publicador define la versión del esquema.
metadataVersion string Versión del esquema de los metadatos del evento. Event Grid define el esquema de las propiedades de nivel superior. Event Grid proporciona este valor.

El objeto data tiene las siguientes propiedades:

Propiedad Tipo Descripción
namespaceName string El espacio de nombres de Service Bus donde se encuentra el recurso.
requestUri string El URI en el que la cola específica o suscripción específicos emite el evento.
entityType string El tipo de entidad de Service Bus que emite eventos (cola o suscripción).
queueName string La cola con mensajes activos si se suscribe a una cola. El valor null si se usan temas o suscripciones.
topicName string El tema al que pertenece la suscripción de Service Bus con mensajes activos. El valor null si se usa una cola.
subscriptionName string La suscripción de Service Bus con mensajes activos. El valor null si se usa una cola.

Suscripciones de Event Grid para espacios de nombres de Service Bus

Puede crear suscripciones de Event Grid para los espacios de nombres de Service Bus de tres formas diferentes:

  • Azure Portal. Vea los siguientes tutoriales para aprender a usar Azure Portal con el fin de crear suscripciones de Event Grid para eventos de Service Bus con Azure Logic Apps y Azure Functions como controladores.
  • CLI de Azure. En el siguiente ejemplo de la CLI se muestra cómo crear una suscripción de Azure Functions para un tema del sistema creado por un espacio de nombres de 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. Este es un ejemplo:
    $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>"
    

¿Cuál es la frecuencia y la cantidad de eventos que se emiten?

Si tiene varias colas y temas o suscripciones en el espacio de nombres, obtendrá al menos un evento por cola y uno por suscripción. Los eventos se emiten inmediatamente si no hay ningún mensaje en la entidad de Service Bus y llega un mensaje nuevo. O bien, los eventos se emiten cada dos minutos, a menos que Service Bus detecte un receptor activo. El examen de los mensajes no interrumpe los eventos.

De forma predeterminada, Service Bus emite eventos para todas las entidades del espacio de nombres. Si desea obtener eventos solo para entidades concretas, consulte la siguiente sección.

Use filtros para limitar de dónde se obtienen los eventos

Por ejemplo, si desea obtener eventos solo para una cola o suscripción del espacio de nombres, puede utilizar los filtros Begins with (Comienza por) o Ends with (Termina con) que proporciona Event Grid. En algunas interfaces, los filtros se denominan Prefijo y Sufijo. Si desea obtener eventos para varias colas y suscripciones (pero no para todas), puede crear varias suscripciones de Event Grid y proporcionar un filtro para cada una.

Pasos siguientes

Vea los siguientes tutoriales: