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
Iniciar novo trabalho de Codificação
O evento de resposta imediata de cada codificador, além de um ACK, é uma Falha ou um evento Despachado de codificação que indica o enfileiramento bem-sucedido do trabalho. Os Eventos de notificação de progresso de codificação lidam com um progresso adicional.
Codificar notificações de progresso
Todos os codificadores usam o mesmo conjunto de Eventos de status de notificação de progresso.
Eventos de armazenamento de blob e contêiner
Contêineres
Blobs
- Definir Metadados de blob
- Copiar Blob
- Excluir Blob
- Alterar a camada de acesso do blob
- Obter URL SAS do blob
- Analisar blob, por exemplo, via MediaInfo
Notificações de blob
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étodoHandlesEvent
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
, ouArchive
. - A propriedade
rehydratePriority
éStandard
ouHigh
.
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
, BlobContainer
ou 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 dadoslogEventMessage
.
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 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
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:
- Sistema de mídia de nuvem do Gridwich
- O que é o Armazenamento de Blobs do Azure?
- O que são Aplicativos Lógicos do Azure?
Módulos do Microsoft Learn: