Editar

Mensagens de solicitação-resposta de Gridwich

Azure Logic Apps
Azure Storage

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 em Gridwich

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

  • Gridwich Acknowledgment (ACK) 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 exclusivos de resposta de sucesso, mas quase todas as operações usam o mesmo evento de falha de Gridwich para comunicar falhas.

Eventos de codificação

Eventos de armazenamento de blob e contêiner

Chaves de armazenamento

Contexto da operação

Gridwich aceita um objeto JSON operationContext como parte de 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 de solicitação. Essas propriedades extras são internas a Gridwich, e seus nomes sempre começam com o caractere til ~. As propriedades de 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, consulte Contexto da operação no artigo Arquitetura de Gridwich.

Mensagens da Grade de Eventos

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

Nas descrições de eventos a seguir, os valores da propriedade JSON são os tipos usuais de cadeia de caracteres, número ou booleano. 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). Note-se a falta de aparelhos encaracolados. O valor não diferencia maiúsculas de minúsculas. Este 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 sequência de conteúdo opaco.
  • Subject-string, como "/blobServices/default/containers/telestreamoutput/blobs/db08122195b66be71db9e54ae04c58df/503220533TAGHD23976fps16x990266772067587.mxf", é uma sequência de conteúdo opaco.
  • EventType-string, como "request.operation.requested" é geralmente uma cadeia da forma: {"request"|"response"}.operation[.qualifier].
  • DataVersion-string, como "1.0", é um indicador de versionamento que os processadores de mensagens usam para distinguir diferentes evoluções da mesma operação. Gridwich requer este campo. O HandlesEvent método 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 Blob ou contêiner de Armazenamento do Azure. Essa cadeia de caracteres geralmente não é uma URL SAS.
  • StorageURL-SAS-string é uma URL SAS absoluta que geralmente aponta para um Blob ou contêiner de Armazenamento do Azure.
  • OperationContextObject, como , é um objeto JSON arbitrário que é aceito em solicitações de entrada e ecoado de volta como { "prodID": 10, "dc": "abc" }parte dos eventos de resposta de Gridwich.
  • Metadata-Dictionary é um dicionário de objetos JSON string-to-string com os pares nome-valor que representam os metadados do Blob de Armazenamento do Azure.
  • Encoder-Context é um objeto JSON opaco de propriedades específicas de um codificador específico.

Resposta ACK genérica de Gridwich

Gridwich>Requester, 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 Request. Por exemplo, para uma solicitação de análise de blob, o valor da data.eventType cadeia de caracteres érequest.blob.analysis.create.

Resposta genérica a falhas de Gridwich

Gridwich>Requester, 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 Failure não inclui o valor da solicitação original, mas inclui o contexto da operação e o nome do manipulador que estava processando a solicitação eventType . As log* propriedades estão relacionadas às informações de problema que a instância configurada do Application Insights registrou.

Para um conjunto limitado de operações, o objeto de evento Failure difere significativamente da mensagem anterior. Para obter mais informações, consulte Chaves de armazenamento de rolo.

O solicitante pede a Gridwich para colocar alguns metadados em um blob

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

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>Requester 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, consulte a solicitação Analisar blob .

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

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

O Gridwich>Requester 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 analysisResults conteúdo do objeto não é especificado. No projeto atual, é a saída MediaInfo.

O blobMetadata valor é uma cadeia de caracteres dictionary.object de propriedades com valor de cadeia de caracteres > que representa todos os pares nome-valor dos metadados do blob especificado.

Como de costume no 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, consulte a API REST SetBlobMetadata do Azure e as regras de nomenclatura em C#.

O solicitante pede a Gridwich para copiar um blob para um novo destino

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

O Gridwich>Requester 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 diz ao solicitante que criou um blob

Gridwich poderia ter criado o blob a partir de qualquer fonte, como um resultado de cópia, chegada na caixa de entrada ou resultado de codificação.

Gridwich>Requester, 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 a Gridwich para excluir um blob

O 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>Requester 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 solicitante que excluiu um blob

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

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

O solicitante solicita que Gridwich retorne um URL SAS de conteúdo de expiração de tempo

O 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>Requester 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 ao Gridwich para codificar via CloudPort Workflow

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

Solicitante pede a Gridwich para codificar via Flip

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

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

Os codificadores Gridwich solicitam resposta de despacho bem-sucedida

Gridwich>Requester, 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
  • Em processamento
  • Com êxito
  • Cancelada

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

Estado de codificação agendado

Gridwich>Requester, 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>Requester, 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

Gridwich>Requester, 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 codificação cancelado

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

O solicitante solicita que o Gridwich altere a camada de armazenamento de um blob

O 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 accessTier propriedade é Hot, Cool, ou Archive.
  • A rehydratePriority propriedade é Standard ou High.

O Gridwich>Requester 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 a Gridwich para criar um contêiner de blob

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

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

O Gridwich>Requester 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 a Gridwich para excluir um contêiner de blob

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

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

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

Solicitante pede a Gridwich para alterar o acesso público de um contêiner

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

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

O Gridwich>Requester 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 Gridwich gire para uma nova chave de armazenamento

A Rollkey família de eventos difere de outras em Gridwich porque, embora a solicitação aceite um operationContext valor, 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 response.rollkey.storage.failure eventos de falha:

  • Não inclua nenhuma das propriedades de dados de informações log de log de eventos de falha normais.
  • Contêm uma propriedade de dados adicional nomeada error que contém o texto da mensagem de erro. Outras falhas de Gridwich carregam esse texto na logEventMessage propriedade de dados.

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 Terraform.

O keyName corresponde 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

  • Success:

    {
        "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 de falha para esta operação não são tão completos quanto as falhas normais de Gridwich.

Próximos passos

Documentação do produto:

Módulos do Microsoft Learn: