Compartir a través de


Recepción de notificaciones de cambio a través de Azure Event Hubs

Los webhooks no son adecuados para recibir notificaciones de cambio en escenarios de alto rendimiento o cuando el receptor no puede exponer una dirección URL de notificación disponible públicamente. Como alternativa, puede usar Azure Event Hubs.

Algunos ejemplos de escenarios de alto rendimiento en los que puede usar Azure Event Hubs son las aplicaciones que se suscriben a un gran conjunto de recursos, las aplicaciones que se suscriben a recursos que cambian con frecuencia y las aplicaciones multiinquilino que se suscriben a recursos en un gran conjunto de organizaciones.

El artículo le guía por el proceso de administración de la suscripción de Microsoft Graph y cómo recibir notificaciones de cambios a través de Azure Event Hubs.

Uso de Azure Event Hubs para recibir una notificación de cambio

Azure Event Hubs es un conocido servicio de distribución y recopilación de eventos en tiempo real creado para escalar. El uso de Azure Event Hubs para recibir notificaciones de cambios difiere de las webhooks de varias maneras, entre las que se incluyen:

  • No se basan en URL de notificación expuestos públicamente. El SDK de Event Hubs retransmite las notificaciones a la aplicación.
  • No es necesario responder a la validación de URL de notificación. Puede ignorar el mensaje de validación que recibe.
  • Debe aprovisionar un centro de eventos.
  • Debe aprovisionar una instancia de Azure Key Vault o agregar el servicio Change Tracking de Microsoft Graph al rol Remitente de datos en el centro de eventos.

Configuración de la autenticación de Azure Event Hubs

Configuración del centro de eventos

En esta sección:

  • Cree un espacio de nombres de Event Hubs.
  • Agregue un centro a ese espacio de nombres para retransmitir y entregar notificaciones.
  • Agregue una directiva de acceso compartido que le permita obtener una cadena de conexión al centro recién creado.

Pasos:

  1. Inicie sesión en Azure Portal con privilegios para crear recursos en su suscripción de Azure.
  2. Seleccione Crear un recurso, escriba Event Hubs en la barra de búsqueda y, a continuación, seleccione la sugerencia de Event Hubs .
  3. En la página de creación de Event Hubs, seleccione Crear.
  4. Rellene los detalles de creación del espacio de nombres de Event Hubs y, a continuación, seleccione Crear.
  5. Cuando se aprovisione el espacio de nombres de Event Hubs, vaya a la página del espacio de nombres.
  6. Seleccione Event Hubs y, a continuación , + Centro de eventos.
  7. Asigne un nombre al nuevo centro de eventos y seleccione Crear.
  8. Una vez creado el centro de eventos, vaya al espacio de nombres de Event Hubs y seleccione Control de acceso (IAM) en la barra lateral.
  9. Seleccione Asignaciones de roles.
  10. Seleccione + Agregar y agregar asignación de roles.
  11. En Rol, vaya a Roles de función de trabajo, seleccione Remitente de datos de Azure Event Hubs y, a continuación, seleccione Siguiente.
  12. En la pestaña Miembros , seleccione Asignar acceso al usuario, grupo o entidad de servicio.
  13. Seleccione + Seleccionar miembros, busque y seleccione Seguimiento de cambios de Microsoft Graph.
  14. Seleccione Revisar y asignar para completar el proceso.

Creación de la suscripción y recepción de notificaciones

Después de crear los servicios necesarios de Azure KeyVault y Azure Event Hubs, ahora puede crear la suscripción de notificación de cambios y empezar a recibir notificaciones de cambio a través de Azure Event Hubs.

Creación de la suscripción

La creación de una suscripción para recibir notificaciones de cambios con Event Hubs es casi idéntica a la creación de la suscripción de webhook, pero con cambios importantes en la propiedad notificationUrl . Revise primero los pasos de creación de suscripciones de webhook antes de continuar.

En la creación de la suscripción, notificationUrl debe apuntar a la ubicación de Event Hubs.

Si usa el control de acceso basado en rol, la propiedad notificationUrl tiene el siguiente aspecto:

EventHub:https://<eventhubnamespace>.servicebus.windows.net/eventhubname/<eventhubname>?tenantId=<domainname>

  • eventhubnamespace es el nombre que se asigna al espacio de nombres de Event Hubs. Se puede encontrar en la página Información general de Event Hubs en Nombre de host.
  • eventhubname es el nombre que se asigna al centro de eventos. Se puede encontrar en Event Hubs:> Información general:> Event Hubs.
  • domainname es el nombre del inquilino; por ejemplo, contoso.com. Dado que este dominio se usa para acceder a Azure Event Hubs, es importante que coincida con el dominio usado por la suscripción de Azure que contiene Azure Event Hubs. Para obtener esta información, seleccione el menú Microsoft Entra ID en Azure Portal y compruebe la página Información general. El nombre de dominio se muestra en el dominio principal.

Nota:

No se permiten suscripciones duplicadas. Cuando una solicitud de suscripción contiene los mismos valores para changeType y el recurso que contiene una suscripción existente, se produce un error en la solicitud con un código 409 Conflictde error HTTP y el mensaje Subscription Id <> already exists for the requested combinationde error .

Recibir notificaciones

Event Hubs entrega ahora las notificaciones de cambio a la aplicación. Para obtener más información, consulte recibir eventos en la documentación de Event hubs.

Para poder recibir las notificaciones en la aplicación, debe crear otra directiva de acceso compartido con un permiso "Escuchar" y obtener la cadena de conexión, de forma similar a los pasos enumerados en Configuración del centro de eventos.

Sugerencia

Cree una directiva independiente para la aplicación que escuche los mensajes de Event Hubs en lugar de reutilizar la misma cadena de conexión que estableció en Azure KeyVault. Esta separación sigue el principio de privilegios mínimos al asegurarse de que cada componente de la solución solo tiene los permisos que necesita.

Control de notificaciones de validación

La aplicación recibe notificaciones de validación cada vez que crea una nueva suscripción. Debería ignorar esas notificaciones. El ejemplo siguiente representa el cuerpo de un mensaje de validación.

 {
    "value":[
        {
            "subscriptionId":"NA",
            "subscriptionExpirationDateTime":"NA",
            "clientState":"NA",
            "changeType":"Validation: Testing client application reachability for subscription Request-Id: 522a8e7e-096a-494c-aaf1-ac0dcfca45b7",
            "resource":"NA",
            "resourceData":{
                "@odata.type":"NA",
                "@odata.id":"NA",
                "id":"NA"
            }
        }
    ]
}

Suscripciones para notificaciones enriquecidas con cargas grandes

El tamaño máximo del mensaje para Event Hubs es de 1 MB. Cuando se usan notificaciones enriquecidas, es posible que se esperen notificaciones que superen este límite. Para recibir notificaciones de más de 1 MB a través de Event Hubs, también debe agregar una cuenta de almacenamiento de blobs a la solicitud de suscripción.

Configuración del almacenamiento y creación de una suscripción

  1. Cree una cuenta de almacenamiento.
  2. Cree un contenedor en la cuenta de almacenamiento. El nombre del contenedor debe establecerse en microsoft-graph-change-notifications.
  3. Recupere las claves de acceso de la cuenta de almacenamiento o la cadena de conexión.
  4. Agregue la cadena de conexión al almacén de claves y asígnele un nombre. Este valor es el nombre del secreto.
  5. Cree o vuelva a crear la suscripción, incluida ahora la propiedad blobStoreUrl en la sintaxis siguiente: blobStoreUrl: "https://<azurekeyvaultname>.vault.azure.net/secrets/<secretname>?tenantId=<domainname>"

Recepción de notificaciones enriquecidas

Cuando Event Hubs recibe una carga de notificación de más de 1 MB, la notificación no contiene las propiedades resource, resourceData y encryptedContent que se incluyen en notificaciones enriquecidas. En su lugar, la notificación contiene una propiedad additionalPayloadStorageId con un identificador que apunta al blob de la cuenta de almacenamiento donde se almacenan estas propiedades.

¿Qué ocurre si falta la aplicación Change Tracking de Microsoft Graph?

Es posible que falte la entidad de servicio de Seguimiento de cambios de Microsoft Graph del inquilino, en función de cuándo se creó el inquilino y de las operaciones administrativas. El appId único global de la entidad de servicio es 0bf30f3b-4a52-48df-9a82-234910c4a086 y puede ejecutar la siguiente consulta para confirmar si existe en el inquilino.

GET https://graph.microsoft.com/v1.0/servicePrincipals(appId='0bf30f3b-4a52-48df-9a82-234910c4a086')

Si la entidad de servicio no existe, créela como se indica a continuación. Debe conceder a la aplicación que realiza la llamada el permiso Application.ReadWrite.All para ejecutar esta operación.

Método 1

POST https://graph.microsoft.com/v1.0/servicePrincipals
Content-type: application/json

{
    "appId": "0bf30f3b-4a52-48df-9a82-234910c4a086"
}

Método 2

POST https://graph.microsoft.com/v1.0/servicePrincipals(appId='0bf30f3b-4a52-48df-9a82-234910c4a086')
Content-type: application/json
Prefer: create-if-missing

{
    "displayName": "Microsoft Graph Change Tracking"
}