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
Démarrer un nouveau travail d’encodage
L’événement de réponse immédiat de chaque encodeur, à part un accusé de réception, est un événement Échec ou Encodage distribué qui indique que la mise en file d’attente du travail a réussi. Le événements de notification de progression d’encodage gèrent la progression.
Notifications de progression d’encodage
Tous les encodeurs utilisent le même jeu d’événements d’état de notification de progression.
Événements de stockage de blob et de conteneur
Containers
Objets blob
Notifications d’objet blob
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éthodeHandlesEvent
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
estHot
,Cool
ouArchive
. - La propriété
rehydratePriority
estStandard
ouHigh
.
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 accessType
Blob
, 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éeslogEventMessage
.
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 :
- Système de média cloud Gridwich
- Qu’est-ce que le stockage d’objets blob Azure ?
- Qu’est-ce qu’Azure Logic Apps ?
Modules Microsoft Learn :