Mensagens de solicitação-resposta do Gridwich

Aplicativos Lógicos do Azure
Armazenamento do Azure

Este artigo detalha os eventos específicos da Grade de Eventos que formam a sequência de solicitação-resposta para diferentes operações de Gridwich.

Eventos de Gridwich

Gridwich Acknowledgment e Gridwich Failure são diferentes de outros eventos de Gridwich. Especificamente:

  • A ACK (Confirmação de Gridwich) indica que Gridwich recebeu, mas não necessariamente processou, a solicitação em uma sequência Request-ACK-Response.
  • Cada operação tem um ou mais eventos de resposta de êxito exclusivos, mas quase todas as operações usam o mesmo evento de Falha de Gridwich para comunicar falha.

Eventos de codificação

Eventos de armazenamento de blob e contêiner

Chaves de armazenamento

Contexto de operação

Gridwich aceita um objeto JSON operationContext como parte das mensagens de solicitação. Em geral, Gridwich ecoa um objeto correspondente em mensagens de resposta e não está preocupado com a estrutura interna específica ou o conteúdo do objeto de contexto.

A exceção é que o objeto de contexto de resposta pode ter propriedades JSON extras em comparação com o equivalente à solicitação. Essas propriedades extras são internas para Gridwich e seus nomes sempre começam com o caractere ~ bloco. As propriedades da solicitação estão sempre presentes no objeto de contexto de resposta.

Como no JSON normal, as propriedades do objeto de resposta podem aparecer em uma ordem diferente do objeto de solicitação.

Para obter mais informações sobre o contexto da operação, confira o Contexto de operação no artigo Arquitetura do Gridwich.

Mensagens da Grade de Eventos

Para obter mais informações sobre o fluxo de mensagens de solicitação-resposta, confirao fluxo de solicitação de arquitetura.

Nas descrições de evento a seguir, os valores da propriedade JSON são os tipos de cadeia de caracteres, número ou booliano usuais. As descrições usam os seguintes tipos de conteúdo de cadeia de caracteres específicos. Se a descrição incluir "opaco", o conteúdo e o formato do valor serão arbitrários.

  • GUID-string, como "b621f33d-d01e-0002-7ae5-4008f006664e" é um valor de ID de 16 bytes escrito para 36 caracteres (32 dígitos hexadecimais, mais 4 traços). Observe a falta de chaves onduladas. O valor não diferencia maiúsculas de minúsculas. Esse formato corresponde ao resultado de System.GUID.ToString("D").
  • Topic-string, como "/subscriptions/5edeadbe-ef64-4022-a3aa-133bfef1d7a2/resourceGroups/gws-shared-rg-sb/providers/Microsoft.EventGrid/topics/gws-gws-egt-sb", é uma cadeia de caracteres de conteúdo opaco.
  • Subject-string, como "/blobServices/default/containers/telestreamoutput/blobs/db08122195b66be71db9e54ae04c58df/503220533TAGHD23976fps16x990266772067587.mxf", é uma cadeia de caracteres de conteúdo opaco.
  • EventType-string, como "request.operation.requested" geralmente é uma cadeia de caracteres do formulário: {"request"|"response"}.operation[.qualifier].
  • DataVersion-string, como "1.0", é um indicador de controle de versão que os processadores de mensagens usam para distinguir diferentes evoluções da mesma operação. Gridwich exige este campo. O método HandlesEvent determina quais versões um Manipulador de Grade de Eventos individual pode processar.
  • URL-string é uma URL absoluta que geralmente aponta para logs do Application Insights. Essas cadeias de caracteres geralmente são uma URL SAS, devido aos requisitos de autorização de destino.
  • StorageURL-string é uma URL absoluta que geralmente aponta para um Azure Storage Blob ou contêiner. Essa cadeia de caracteres geralmente não é uma URL SAS.
  • StorageURL-SAS-string é uma URL SAS absoluta que geralmente aponta para um Azure Storage Blob ou contêiner.
  • OperationContextObject, como { "prodID": 10, "dc": "abc" }, é um objeto JSON arbitrário que é aceito em solicitações de entrada e ecoado de volta como parte de eventos de resposta Gridwich.
  • Metadata-Dictionary é um dicionário de objetos JSON de cadeia de caracteres para cadeia de caracteres com os pares nome-valor que representam metadados de Azure Storage Blob.
  • Encoder-Context é um objeto JSON opaco de propriedades específicas de um codificador específico.

Resposta ACK 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"
}

O data.eventType valor da cadeia de caracteres é a propriedade de nível eventType superior do evento Solicitação. Por exemplo, para uma solicitação de análise de blob, o valor da data.eventType cadeia de caracteres érequest.blob.analysis.create.

Resposta de falha 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"
}

O evento Falha não inclui o valor da solicitação eventType original, mas inclui o contexto de operação e o nome do manipulador que estava processando a solicitação. As log* propriedades estão relacionadas às informações de problema registradas pela instância do Application Insights configurada.

Para um conjunto limitado de operações, o objeto de evento Falha difere significativamente da mensagem anterior. Para saber mais, confiraChaves de armazenamento em rolo.

O Solicitante pede ao Gridwich para colocar alguns metadados em um blob

OSolicitante>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"
}

O blobMetadata é um objeto de propriedades com valor de cadeia de caracteres que representa todos os pares nome-valor dos metadados de blob desejados.

Gridwich>O 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 posteriormente os metadados atuais de um blob, confira a solicitação Analisar blob.

O solicitante pede a Gridwich para executar uma análise de um blob via MediaInfo

OSolicitante>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>O 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"
}

O conteúdo do objeto analysisResults não é especificado. No projeto atual, é a saída MediaInfo.

O valor blobMetadata é um > dicionário de cadeia de caracteres.objeto de propriedades com valor de cadeia de caracteres que representa todos os pares nome-valor dos metadados do blob especificado.

Como de costume com o Armazenamento do Azure, os nomes de itens de metadados devem estar em conformidade com as regras de nomenclatura do identificador C#. Para obter mais informações, confira a API REST do Azure SetBlobMetadata e as Regras de nomenclatura em C#.

Solicitante pede a Gridwich para copiar um blob para um novo destino

OSolicitante>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>O 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"
}

O Gridwich informa ao solicitante que ele criou um blob

O Gridwich poderia ter criado o blob de qualquer origem, como um resultado de cópia, chegada da caixa de entrada ou resultado de codificação.

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"
}

O Solicitante pede que Gridwich exclua um blob

OSolicitante>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>O 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"
}

O Gridwich informa ao solicitante que ele excluiu um blob

A exclusão de blob pode vir de qualquer fonte, como uma solicitação explícita de um solicitante ou resultado de operações internas.

Gridwich>O solicitante usa ResponseBlobDeleteScheduledDTO.

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

O Solicitante pede que Gridwich retorne uma URL SAS de conteúdo de expiração de tempo

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>O 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"
}

O Solicitante pede a Gridwich para codificar por meio do Fluxo de Trabalho do CloudPort

Solicitante>Gridwichusa 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",
}

O Solicitante pede a Gridwich para codificar via Flip

Solicitante>Gridwichusa 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"
}

Exemplo 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"
}

Resposta de expedição bem-sucedida de solicitações comuns de 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"
}

O <encodername> é um dos cloudport ou flip.

Mensagens de status assíncronas do codificador Gridwich

Os codificadores Gridwich geram quatro tipos de eventos durante ou no final da codificação:

  • Agendado
  • Processing
  • Êxito
  • Cancelada

Uma falha na solicitação de codificação gera um evento de Falha de Gridwich.

Status de codificação agendado

O Solicitante>Gridwich, 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"
}

Processamento de status de codificação

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"
}

Sucesso do status de codificação

O Solicitante>Gridwich, 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.",
        "outputs":[
            { "blobUri": "StorageURL-string" }
        ]
    },
    "eventType": "response.encode.<encodername>.success"
}

Status de codificação cancelado

O Solicitante>Gridwich, 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>.canceled"
}

O Solicitante pede que o Gridwich altere a camada de armazenamento de um 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"
}
  • A propriedade accessTier é Hot, Cool, ou Archive.
  • A propriedade rehydratePriority é Standard ou 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"
}

O Solicitante pede ao Gridwich para criar um contêiner de blob

A solicitação fornece a Conta de Armazenamento e o nome do contêiner.

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>O 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"
}

O Solicitante pede que o Gridwich exclua um contêiner de blob

A solicitação fornece a Conta de Armazenamento e o nome do contêiner.

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>O 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"
}

O solicitante pede ao Gridwich que altere o acesso público de um contêiner

A solicitação fornece o nome do contêiner e um accessType de Blob, BlobContainerou None.

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>O 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"
}

O solicitante pede que o Gridwich gire para uma nova chave de armazenamento

A família de eventos Rollkey difere de outras em Gridwich, pois, enquanto a solicitação aceita um valor operationContext, nenhum dos eventos de resposta o inclui.

Os eventos de falha não são do tipo de evento response.failure normal, mas têm um valor de tipo de response.rollkey.storage.failure.

Os eventos de falha response.rollkey.storage.failure:

  • Não inclua nenhuma das propriedades normais de dados de registro log em log do evento de falha.
  • Contém uma propriedade de dados adicional nomeada error que contém texto de mensagem de erro. Outras falhas de Gridwich carregam esse texto na propriedade de dados logEventMessage.

Esses pontos refletem o estado atual do Aplicativo Lógico do Azure que executa a operação RollKey. A definição do Aplicativo Lógico está no arquivo infrastructure/terraform/keyroller/main.tf do Terraform.

O keyNameCorresponde ao nome da chave que o Armazenamento do Azure define em sua operação Obter Chaves.

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

  • Sucesso:

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

    {
        "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"
    }
    

    Os resultados da falha dessa operação não são tão completos quanto as falhas normais do Gridwich.

Próximas etapas

Documentação do produto:

Módulos do Microsoft Learn: