En este artículo se describen los eventos de Event Grid específicos que conforman la secuencia de solicitud-respuesta para distintas operaciones de Gridwich.
Eventos de Gridwich
La confirmación de Gridwich y el error de Gridwich son diferentes de otros eventos de Gridwich. Concretamente:
- La codificación de Gridwich indica que Gridwich ha recibido (pero no necesariamente procesado) la solicitud en una secuencia de solicitud-confirmación-respuesta.
- Cada operación tiene uno o varios eventos de respuesta correcta únicos, pero casi todas las operaciones usan el mismo evento de error de Gridwich para comunicar un error.
Codificación de eventos
Iniciación de nuevo trabajo de codificación
El evento de respuesta inmediata de cada codificador, aparte de una confirmación, es un error o un evento de codificación enviada que indica que el trabajo se ha puesto en cola correctamente. Los eventos de notificación de progreso de codificación administran el progreso posterior.
Notificaciones de progreso de codificación
Todos los codificadores usan el mismo conjunto de eventos de estado de notificación de progreso.
Eventos de almacenamiento de blobs y contenedores
Contenedores
Blobs
Notificaciones de blobs
Claves de almacenamiento
Contexto de operación
Gridwich acepta un objeto JSON operationContext
como parte de los mensajes de solicitud. En general, Gridwich repite un objeto correspondiente en los mensajes de respuesta y no se preocupa de la estructura interna específica o del contenido del objeto de contexto.
La excepción es que el objeto de contexto de respuesta puede tener propiedades JSON adicionales en comparación con la solicitud equivalente. Estas propiedades adicionales son internas de Gridwich y sus nombres siempre empiezan con el carácter de virgulilla (~). Las propiedades de la solicitud siempre están presentes en el objeto de contexto de respuesta.
Como en el JSON normal, las propiedades del objeto de respuesta pueden aparecer en un orden diferente que en el objeto de solicitud.
Para más información sobre el contexto de la operación, consulte Contexto de operación en el artículo acerca de la arquitectura de Gridwich.
Mensajes de Event Grid
Para más información sobre el flujo de mensajes de solicitud-respuesta, consulte el flujo de solicitudes de la arquitectura.
En las siguientes descripciones de eventos, los valores de propiedad JSON son los tipos de cadena, número o booleanos habituales. Las descripciones usan los siguientes tipos de contenido de cadena específicos. Si la descripción incluye el término "opaco", el contenido y el formato del valor son arbitrarios.
GUID-string
, al igual que"b621f33d-d01e-0002-7ae5-4008f006664e"
, es un valor de identificador de 16 bytes que se escribe en 36 caracteres (32 dígitos hexadecimales, más 4 guiones). Observe que no tiene llaves. El valor distingue mayúsculas de minúsculas. Este formato corresponde al resultado de System.GUID.ToString("D").Topic-string
, al igual que"/subscriptions/5edeadbe-ef64-4022-a3aa-133bfef1d7a2/resourceGroups/gws-shared-rg-sb/providers/Microsoft.EventGrid/topics/gws-gws-egt-sb"
, es una cadena de contenido opaco.Subject-string
, al igual que"/blobServices/default/containers/telestreamoutput/blobs/db08122195b66be71db9e54ae04c58df/503220533TAGHD23976fps16x990266772067587.mxf"
, es una cadena de contenido opaco.EventType-string
, al igual que"request.operation.requested"
, es generalmente una cadena con el formato:{"request"|"response"}.operation[.qualifier]
.DataVersion-string
, al igual que"1.0"
, es un indicador de control de versiones que los procesadores de mensajes usan para distinguir distintas evoluciones de la misma operación. Gridwich requiere este campo. El métodoHandlesEvent
determina qué versiones puede procesar un controlador de Event Grid individual.URL-string
es una dirección URL absoluta que suele apuntar a registros de Application Insights. Estas cadenas suelen ser una dirección URL de SAS, debido a los requisitos de autorización de destino.StorageURL-string
es una dirección URL absoluta que suele apuntar a una instancia de Azure Storage Blob o un contenedor. Esta cadena normalmente no es una dirección URL de SAS.StorageURL-SAS-string
es una dirección URL de SAS absoluta que suele apuntar a una instancia de Azure Storage Blob o un contenedor.OperationContextObject
, al igual que{ "prodID": 10, "dc": "abc" }
, es un objeto JSON arbitrario que se acepta en las solicitudes entrantes y se devuelve como parte de los eventos de respuesta de Gridwich.Metadata-Dictionary
es un diccionario de objetos JSON de cadena a cadena con los pares nombre-valor que representan metadatos de Azure Storage Blob.Encoder-Context
es un objeto JSON opaco de propiedades específico de un codificador determinado.
Respuesta de confirmación genérica de Gridwich
Gridwich>Solicitante usa ResponseAcknowledgeDTO.
{
"id": "GUID-string",
"topic": "Topic-string",
"subject": "Subject-string",
"dataVersion": "DataVersion-string",
"data": {
"operationContext": <OperationContextObject>,
"eventType": "request.blob.metadata.create"
},
"eventType": "response.acknowledge"
}
El valor de cadena data.eventType
es la propiedad eventType
de nivel superior del evento de solicitud. Por ejemplo, para una solicitud de análisis de blobs, el valor de la cadena data.eventType
es request.blob.analysis.create
.
Respuesta de error genérica de Gridwich
Gridwich>Solicitante usa 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"
}
El evento de error no incluye la el valoreventType
de la solicitud original, pero sí el contexto de la operación y el nombre del controlador que estaba procesando la solicitud. Las propiedades de log*
están relacionadas con la información de problemas que registró la instancia de Application Insights configurada.
Para un conjunto limitado de operaciones, el objeto de evento de error difiere considerablemente del mensaje anterior. Para más información, consulte Rotación de claves de almacenamiento.
El solicitante pide a Gridwich que coloque algunos metadatos en un blob
Solicitante>Gridwich usa 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
es un objeto de propiedades con valores de cadena que representan todos los pares nombre-valor de los metadatos de blob deseados.
Gridwich>Solicitante usa 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"
}
Para recuperar más adelante los metadatos actuales de un blob, consulte la solicitud de análisis de un blob.
El solicitante pide a Gridwich que realice un análisis de un blob mediante MediaInfo
Solicitante>Gridwich usa 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>Solicitante usa 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"
}
No se especifica el contenido del objeto analysisResults
. En el proyecto actual, es la salida de MediaInfo.
El valor blobMetadata
es un objeto de diccionario de cadena > cadena de propiedades con valores de cadena que representan todos los pares nombre-valor de los metadatos del blob especificados.
Como de costumbre con Azure Storage, los nombres de los elementos de metadatos deben cumplir las reglas de nomenclatura de identificadores de C#. Para más información, consulte la API REST SetBlobMetadata de Azure y las reglas de nomenclatura de C#.
El solicitante pide a Gridwich que copie un blob en un nuevo destino
Solicitante>Gridwich usa 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>Solicitante usa 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 indica al solicitante que ha creado un blob
Gridwich podría haber creado el blob desde cualquier origen, como el resultado de una copia, una llegada a la bandeja de entrada o el resultado de una codificación.
Gridwich>Solicitante usa 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"
}
El solicitante pide a Gridwich que elimine un blob
Solicitante>Gridwich usa RequestBlobDeleteDTO.
{
"id": "GUID-string",
"topic": "Topic-string",
"subject": "Subject-string",
"dataVersion": "DataVersion-string",
"data": {
"operationContext": <OperationContextObject>,
"blobUri": "StorageURL-string",
},
"eventType": "request.blob.delete"
}
Gridwich>Solicitante usa 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 informa al solicitante de que ha eliminado un blob
La eliminación del blob puede provenir de cualquier origen, como una solicitud explícita de un solicitante o un resultado de operaciones internas.
Gridwich>Solicitante usa ResponseBlobDeleteSuccessDTO.
{
"id": "GUID-string",
"topic": "Topic-string",
"subject": "Subject-string",
"dataVersion": "DataVersion-string",
"data": {
"operationContext": <OperationContextObject>,
"blobUri": "StorageURL-string"
},
"eventType": "response.blob.delete.success"
}
El solicitante pide a Gridwich que devuelva una dirección URL de SAS de contenido con expiración de tiempo
Solicitante>Gridwich usa 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>Solicitante usa 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"
}
El solicitante pide a Gridwich que codifique mediante el flujo de trabajo de CloudPort
Solicitante>Gridwich usa 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",
}
El solicitante pide a Gridwich que codifique mediante Flip
Solicitante>Gridwich usa 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"
}
Ejemplo 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"
}
Respuesta de envío correcta de solicitud común de los codificadores de Gridwich
Gridwich>Solicitante usa 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"
}
El <encodername>
es uno de cloudport
o flip
.
Mensajes de estado asíncronos de los codificadores de Gridwich
Los codificadores de Gridwich generan cuatro tipos de eventos durante o al final de la codificación:
- Programado
- Procesamiento
- Correcto
- Canceled
Un error de solicitud de codificación genera un evento de error de Gridwich.
Estado de codificación programado
Gridwich>Solicitante usa 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"
}
Procesamiento de estado de codificación
Gridwich>Solicitante usa 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"
}
Estado de codificación correcto
Gridwich>Solicitante usa 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"
}
Estado de codificación cancelado
Gridwich>Solicitante usa 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"
}
El solicitante pide a Gridwich que cambie la capa de almacenamiento de un blob
Solicitante>Gridwich usa 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 propiedad
accessTier
esHot
,Cool
oArchive
. - La propiedad
rehydratePriority
esStandard
oHigh
.
Gridwich>Solicitante usa 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"
}
El solicitante pide a Gridwich que cree un contenedor de blobs
La solicitud proporciona el nombre del contenedor y la cuenta de almacenamiento.
Solicitante>Gridwich usa 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>Solicitante usa 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"
}
El solicitante pide a Gridwich que elimine un contenedor de blobs
La solicitud proporciona el nombre del contenedor y la cuenta de almacenamiento.
Solicitante>Gridwich usa 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>Solicitante usa 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"
}
El solicitante pide a Gridwich que cambie el acceso público de un contenedor
La solicitud proporciona el nombre del contenedor y Blob
, BlobContainer
o None
para accessType
.
Solicitante>Gridwich usa 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>Solicitante usa 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"
}
El solicitante pide a Gridwich que rote a una nueva clave de almacenamiento
La familia de eventos Rollkey
difiere de otras de Gridwich en que, mientras que la solicitud acepta un valor operationContext
, ninguno de los eventos de respuesta lo incluye.
Los eventos de error no son del tipo de evento response.failure normal, sino que tienen un valor del tipo response.rollkey.storage.failure
.
Los eventos de error response.rollkey.storage.failure
:
- No incluyen ninguna de las propiedades de datos
log
de información de registro de eventos de error normales. - Contienen una propiedad de datos adicional denominada
error
que incluye el texto del mensaje de error. Otros errores de Gridwich llevan ese texto en la propiedad de datoslogEventMessage
.
Estos puntos reflejan el estado actual de la aplicación lógica de Azure que realiza la operación RollKey. La definición de la aplicación lógica está en el archivo Terraform infrastructure/terraform/keyroller/main.tf.
keyName
corresponde al nombre de la clave que Azure Storage define en la operación de keyName
.
Solicitante>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>Solicitante
Correcto:
{ "id": "GUID-string", "topic": "Topic-string", "subject": "Subject-string", "dataVersion": "DataVersion-string", "data": { "account": "storageAccountName", "keyName": "key1" }, "eventType": "response.rollkey.storage.success" }
Error:
{ "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" }
Los resultados de error de esta operación no son tan completos como los errores normales de Gridwich.
Pasos siguientes
Documentación del producto:
Módulos de Microsoft Learn: