Editar

Share via


Mensajes de solicitud-respuesta de Gridwich

Azure Logic Apps
Azure Storage

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

Eventos de almacenamiento de blobs y contenedores

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étodo HandlesEvent 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 es Hot, Cool o Archive.
  • La propiedad rehydratePriority es Standard o High.

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 datos logEventMessage.

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: