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.
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: