Édition

Share via


Messages de demande-réponse de Gridwich

Azure Logic Apps
Stockage Azure

Cet article détaille les événements Event Grid spécifiques qui forment la séquence de demande-réponse pour différentes opérations de Gridwich.

Événements de Gridwich

Les événements Accusé de réception et Échec de Gridwich diffèrent des autres événements. Plus précisément :

  • L’Accusé de réception (ACK) de Gridwich indique que Gridwich a reçu, mais pas nécessairement traité, la demande dans une séquence Demande-ACK-Réponse.
  • Chaque opération a un ou plusieurs événements de réponse Réussite, mais presque toutes les opérations utilisent le même événement Échec de Gridwich pour communiquer l’échec.

Événements d’encodage

Événements de stockage de blob et de conteneur

Clés de stockage

Contexte de l’opération

Gridwich accepte un objet operationContext JSON dans les messages de demande. En général, Gridwich retourne un objet correspondant dans les messages de réponse, et n’est pas concerné par la structure interne ou le contenu spécifique de l’objet de contexte.

L’exception est que l’objet de contexte de la réponse peut avoir des propriétés JSON supplémentaires par rapport à l’équivalent dans la demande. Ces propriétés supplémentaires sont internes à Gridwich et leurs noms commencent toujours par le caractère tilde ~. Les propriétés de la demande sont toujours présentes sur l’objet de contexte de la réponse.

Comme dans un JSON normal, les propriétés de l’objet de la réponse peuvent apparaître dans un ordre différent de celui de l’objet de la demande.

Pour plus d’informations sur le contexte d’opération, consultez Contexte d’opération dans l’article sur l’architecture de Gridwich.

Messages d’Event Grid

Pour plus d’informations sur le flux de messages de requête-réponse, consultez le flux de demande d’architecture.

Dans les descriptions d’événements suivantes, les valeurs de propriété JSON sont les types habituels de chaîne, de nombre ou de booléen. Les descriptions utilisent les types de contenu de chaîne spécifiques suivants. Si la description contient « opaque », le contenu et le format de la valeur sont arbitraires.

  • GUID-string, comme "b621f33d-d01e-0002-7ae5-4008f006664e", est une valeur d’ID de 16 octets épelée en 36 caractères (32 signes hexadécimaux, plus 4 tirets). Notez l’absence d’accolades. La valeur ne respecte pas la casse. Ce format correspond au résultat de System.GUID.ToString("D").
  • Topic-string, comme "/subscriptions/5edeadbe-ef64-4022-a3aa-133bfef1d7a2/resourceGroups/gws-shared-rg-sb/providers/Microsoft.EventGrid/topics/gws-gws-egt-sb", est une chaîne de contenu opaque.
  • Subject-string, comme "/blobServices/default/containers/telestreamoutput/blobs/db08122195b66be71db9e54ae04c58df/503220533TAGHD23976fps16x990266772067587.mxf", est une chaîne de contenu opaque.
  • EventType-string, comme "request.operation.requested", est généralement une chaîne sous la forme : {"request"|"response"}.operation[.qualifier].
  • DataVersion-string, comme "1.0", est un indicateur de contrôle de version que les processeurs de messages utilisent pour distinguer différentes évolutions de la même opération. Gridwich requiert ce champ. La méthode HandlesEvent détermine les versions qu’un gestionnaire Event Grid individuel peut traiter.
  • URL-string est une URL absolue qui pointe souvent vers des journaux d’Application Insights. Ces chaînes sont généralement une URL de SAP, en raison des exigences d’autorisation cibles.
  • StorageURL-string est une URL absolue qui pointe souvent vers un Azure Storage Blob ou un conteneur. Cette chaîne n’est généralement pas une URL de SAP.
  • StorageURL-SAS-string est une URL de SAP absolue qui pointe souvent vers un Azure Storage Blob ou un conteneur.
  • OperationContextObject, comme { "prodID": 10, "dc": "abc" }, est un objet JSON arbitraire qui est accepté sur les demandes entrantes et renvoyé dans le cadre des événements de réponse de Gridwich.
  • Metadata-Dictionary est un dictionnaire d’objet JSON de chaîne à chaîne avec les paires nom-valeur représentant des métadonnées d’Azure Storage Blob.
  • Encoder-Context est un objet JSON opaque de propriétés spécifiques d’un encodeur particulier.

Réponse ACK générique de Gridwich

Gridwich>Demandeur, utilise ResponseAcknowledgeDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
        "eventType": "request.blob.metadata.create"
    },
    "eventType": "response.acknowledge"
}

La valeur de chaîne data.eventType est la propriété eventType de niveau supérieur de l’événement de demande. Par exemple, pour une demande d’analyse de blob, la valeur de chaîne data.eventType est request.blob.analysis.create.

Réponse Échec générique de Gridwich

Gridwich>Demandeur, utilise ResponseFailureDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
        "logEventId": 30001,
        "logEventMessage": "the message text for eventId 30001",
        "logRecordId": "GUID-string",
        "logRecordUrl": "URL-string", // AppInsight URL to the logRecordId
        "eventHandlerClassName": "string",
        "handlerId": "GUID-string"
    },
    "eventType": "response.failure"
}

L’événement Échec n’inclut pas la valeur eventType de la demande d’origine, mais inclut le contexte d’opération et le nom du gestionnaire qui a traité la demande. Les propriétés de log* ont trait aux informations sur le problème que l’instance Application Insights configurée a enregistrées.

Pour un ensemble limité d’opérations, l’objet d’événement Échec diffère considérablement du message précédent. Pour plus d’informations, consultez Restaurer les clés de stockage.

Le demandeur demande à Gridwich de placer des métadonnées sur un objet blob

Demandeur>Gridwich utilise RequestBlobMetadataCreateDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
        "blobUri": "StorageURL-string",
        "blobMetadata": <Metadata-Dictionary>
    },
    "eventType": "request.blob.metadata.create"
}

blobMetadata est un objet de propriétés à valeur de chaîne représentant toutes les paires nom-valeur des métadonnées d’objet blob souhaitées.

Gridwich>Demandeur utilise ResponseBlobMetadataSuccessDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
        "blobUri": "StorageURL-string",
        "blobMetadata": <Metadata-Dictionary>
    },
    "eventType": "response.blob.metadata.success"
}

Pour récupérer ultérieurement les métadonnées actuelles d’un blob, consultez la demande Analyser un objet blob.

Le demandeur demande à Gridwich d’effectuer une analyse d’un blob via MediaInfo

Demandeur>Gridwich utilise RequestBlobAnalysisCreateDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
        "blobUri": "StorageURL-string",
        "analyzerSpecificData": {
            "mediaInfo": {
                  "commandLineOptions": {
                    "Complete": "1",
                    "Output": "JSON"
                  }
            }
        }
    },
    "eventType": "request.blob.analysis.create"
}

Gridwich>Demandeur utilise ResponseBlobAnalysisSuccessDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
        "blobUri": "StorageURL-string",
        "blobMetadata": <Metadata-Dictionary>,
        "analysisResults": <Analysis-Result-Object>
    },
    "eventType": "response.blob.analysis.success"
}

Le contenu de l’objet analysisResults n’est pas spécifié. Dans le projet actif, il s’agit de la sortie de MediaInfo.

La valeur blobMetadata est un objet dictionnaire chaîne > chaîne de propriétés à valeur de chaîne représentant toutes les paires nom-valeur des métadonnées de l’objet BLOB souhaité.

Comme d’habitude avec le service Stockage Azure, les noms d’éléments de métadonnées doivent être conformes aux règles de nommage d’identificateur C#. Pour plus d’informations, consultez API REST SetBlobMetadata Azure et les Règles de nommage C#.

Le demandeur demande à Gridwich de copier un blob vers une nouvelle destination

Demandeur>Gridwich utilise RequestBlobCopyDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
        "sourceUri": "StorageURL-string",
        "destinationUri": "StorageURL-string"
    },
    "eventType": "request.blob.copy"
}

Gridwich>Demandeur utilise ResponseBlobCopyScheduledDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
        "sourceUri": "URL-string",
        "blobMetadata": <Metadata-Dictionary>,
        "destinationUri": "StorageURL-string"
    },
    "eventType": "response.blob.copy.scheduled"
}

Gridwich indique au demandeur qu’il a créé un blob

Gridwich aurait pu créer le blob à partir de n’importe quelle source, comme un résultat de copie, une arrivée dans la boîte de réception ou un résultat d’encodage.

Gridwich>Demandeur, utilise ResponseBlobCreatedSuccessDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
        "blobUri": "StorageURL-string",
        "blobMetadata": <Metadata-Dictionary>
    },
    "eventType": "response.blob.created.success"
}

Le demandeur demande à Gridwich de supprimer un blob

Demandeur>Gridwich utilise RequestBlobDeleteDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
        "blobUri": "StorageURL-string",
    },
    "eventType": "request.blob.delete"
}

Gridwich>Demandeur utilise ResponseBlobDeleteScheduledDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
        "blobUri": "StorageURL-string",
        "blobMetadata": <Metadata-Dictionary>
    },
    "eventType": "response.blob.delete.scheduled"
}

Gridwich informe le demandeur qu’il a supprimé un blob

La suppression du blob peut provenir de n’importe quelle source, comme une demande explicite d’un demandeur ou un résultat d’opérations internes.

Gridwich>Demandeur, utilise ResponseBlobDeleteSuccessDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
        "blobUri": "StorageURL-string"
    },
    "eventType": "response.blob.delete.success"
}

Le demandeur demande à Gridwich de retourner une URL de SAP de contenu d’expiration de délai

Demandeur>Gridwich utilise RequestBlobSasUrlCreateDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
        "blobUri": "StorageURL-string",
        "secToLive": 1200
    },
    "eventType": "request.blob.sas-url.create"
}

Gridwich>Demandeur utilise ResponseBlobSasUrlSuccessDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
        "sasUrl": "StorageURL-SAS-string"
    },
    "eventType": "response.blob.sas-url.success"
}

Le demandeur demande à Gridwich d’encoder via le flux de travail CloudPort

Demandeur>Gridwich, utilise RequestCloudPortEncodeCreateDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
          "inputs": [
                {"blobUri": "StorageURL-string" }
          ],
          "outputContainer": "https://<storageaccountname>.blob.core.windows.net/<containername>/",
          "workflowName": "TestWorkflow2",
          "parameters": [ { "prop1": "value1" } ],
           "secToLive": 18000
  },
  "eventType": "request.encode.cloudport.create",
}

Le demandeur demande à Gridwich d’encoder via Flip

Demandeur>Gridwich, utilise RequestFlipEncodeCreateDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
          "inputs": [
                {"blobUri": "StorageURL-string" }
          ],
          "outputContainer": "StorageURL-string", // of the Storage container
          "factoryName": "gws-dev-flip",
          "profiles": "h264",
          "parameters": [ { "prop1": "value1" } ],
           "secToLive": 18000
      },
      "eventType": "request.encode.flip.create"
}

Exemple de RequestFlipEncodeCreateDTO

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": { "progId": 1234 },
          "inputs": [
            {
                "blobUri": "https://gws-sa1.blob.core.windows.net/Vid0001Container/input.mp4"
            }
          ],
          "outputContainer": "https://gws-sa22out.blob.core.windows.net/Out0004/",
          "factoryName": "gws-dev-flip",
          "profiles": "h264",
          "parameters": [ { "someProperty1": "someValue1" } ],
          "secToLive": 18000
      },
      "eventType": "request.encode.flip.create"
}

Réponse de distribution réussie de demande courante d’encodeurs Gridwich

Gridwich>Demandeur, utilise ResponseEncodeDispatchedDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
        "encoderContext": <EncoderContext>,
        "workflowJobName": "CloudPort or Flip assigned job name for workflow instance."
    },
    "eventType": "response.encode.<encodername>.dispatched"
}

Le <encodername> est un de cloudport ou flip.

Messages d’état asynchrone d’encodeur Gridwich

Les encodeurs Gridwich génèrent quatre types d’événements en cours ou en fin d’encodage :

  • Planifiée
  • Traitement
  • Succès
  • Opération annulée

Un échec de demande d’encodage génère un événement Échec de Gridwich.

État d’encodage Planifié

Gridwich>Demandeur, utilise ResponseEncodeScheduledDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
        "encoderContext":  <EncoderContext>,
        "workflowJobName": "CloudPort or Flip assigned job name for workflow instance."
    },
    "eventType": "response.encode.<encodername>.scheduled"
}

État d’encodage Traitement

Gridwich>Demandeur, utilise ResponseEncodeProcessingDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
        "encoderContext": <EncoderContext>,
        "workflowJobName": "CloudPort or Flip assigned job name for workflow instance.",
        "currentStatus": "string",
        "percentComplete": 50,
    },
    "eventType": "response.encode.<encodername>.processing"
}

État d’encodage Réussite

Gridwich>Demandeur, utilise ResponseEncodeSuccessDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,,
        "encoderContext": <EncoderContext>,
        "workflowJobName": "CloudPort or Flip assigned job name for workflow instance.",
        "outputs":[
            { "blobUri": "StorageURL-string" }
        ]
    },
    "eventType": "response.encode.<encodername>.success"
}

État d’encodage Annulé

Gridwich>Demandeur, utilise ResponseEncodeCanceledDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
        "encoderContext": <EncoderContext>,
        "workflowJobName": "CloudPort or Flip assigned job name for workflow instance."
    },
    "eventType": "response.encode.<encodername>.canceled"
}

Le demandeur demande à Gridwich de modifier le niveau de stockage d’un blob

Demandeur>Gridwich utilise RequestBlobTierChangeDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
        "blobUri": "StorageURL-string",
        "accessTier": "string",
        "rehydratePriority": "string"
    },
    "eventType": "request.blob.tier.change"
}
  • La propriété accessTier est Hot, Cool ou Archive.
  • La propriété rehydratePriority est Standard ou High.

Gridwich>Demandeur utilise ResponseBlobTierChangeSuccessDTO

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
        "blobUri": "StorageURL-string",
        "accessTier": "string",
        "rehydratePriority": "string"
    },
    "eventType":"response.blob.tier.success"
}

Le demandeur demande à Gridwich de créer un conteneur d’objets blob

La demande fournit le compte de stockage et le nom du conteneur.

Demande>Gridwich utilise RequestContainerCreateDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
        "storageAccountName": "string", // e.g. mySA1
        "containerName": "string"       // e.g. mycontainer
    },
    "eventType": "request.blob.container.create"
}

Gridwich>Demande utilise ResponseContainerCreatedSuccessDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
        "storageAccountName": "string",
        "containerName": "string"
    },
    "eventType": "response.blob.container.create.success"
}

Le demandeur demande à Gridwich de supprimer un conteneur d’objets blob

La demande fournit le compte de stockage et le nom du conteneur.

Demandeur>Gridwich utilise RequestContainerDeleteDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
        "storageAccountName": "string",
        "containerName": "string"
    },
    "eventType": "request.blob.container.delete"
}

Gridwich>Demandeur utilise ResponseContainerDeleteSuccessDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
        "storageAccountName": "string",
        "containerName": "string"
    },
    "eventType": "response.blob.container.delete.success"
}

Le demandeur demande à Gridwich de modifier l’accès public d’un conteneur

La demande fournit le nom du conteneur et un accessTypeBlob, BlobContainer ou None.

Demandeur>Gridwich utilise RequestContainerAccessChangeDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
        "storageAccountName": "string",
        "containerName": "string",
        "accessType": "string"
    },
    "eventType": "request.blob.container.access.change"
}

Gridwich>Demandeur utilise ResponseContainerAccessChangeSuccessDTO.

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
        "storageAccountName": "string",
        "containerName": "string",
        "accessType": "string"
    },
    "eventType": "response.blob.container.access.change.success"
}

Le demandeur demande à Gridwich d’effectuer une rotation vers une nouvelle clé de stockage

La famille d’événements Rollkey diffère des autres dans Gridwich en ce que, quand la demande accepte une valeur operationContext, aucun des événements de réponse ne l’inclut.

Les événements d’échec ne sont du type response.failure normal, mais ont une valeur type response.rollkey.storage.failure.

Les événements d’échec response.rollkey.storage.failure :

  • N’incluez aucune des propriétés de données log des informations normales de journalisation des événements de défaillance.
  • Contiennent une propriété de données supplémentaire nommée error qui contient un texte de message d’erreur. Les autres échecs Gridwich contiennent ce texte sur la propriété de données logEventMessage.

Ces points reflètent l’état actuel de l’application logique Azure qui effectue l’opération RollKey. La définition de l’application logique se trouve dans le fichier Terraform infrastructure/Terraform/keyroll/main.tf.

Le keyName correspond au nom de clé que le service Stockage Azure définit dans son opération Obtenir les clés.

Demandeur>Gridwich

{
    "id": "GUID-string",
    "topic": "Topic-string",
    "subject": "Subject-string",
    "dataVersion": "DataVersion-string",
    "data": {
        "operationContext": <OperationContextObject>,
        "account": "storageAccountName",
        "keyName": "key1"
    },
    "eventType": "request.rollkey.storage"
}

Gridwich>Demandeur

  • Réussite :

    {
        "id": "GUID-string",
        "topic": "Topic-string",
        "subject": "Subject-string",
        "dataVersion": "DataVersion-string",
        "data": {
            "account": "storageAccountName",
            "keyName": "key1"
        },
        "eventType": "response.rollkey.storage.success"
    }
    
  • Échec :

    {
        "id": "GUID-string",
        "topic": "Topic-string",
        "subject": "Subject-string",
        "dataVersion": "1.0",
        "data": {
           "account": "storageAccountName1",
            "keyName": "key1",
            "error": "error message text"
        },
        "eventType": "response.rollkey.storage.failure"
    }
    

    Les résultats de cette opération ne sont pas aussi complets que les échecs de Gridwich normaux.

Étapes suivantes

Documentation du produit :

Modules Microsoft Learn :