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
Iniciar novo trabalho de codificação
O evento de resposta imediata de cada codificador, além de um ACK, é um evento Failure ou Encoding dispatched que indica o enfileiramento bem-sucedido do trabalho. Os eventos de notificação de progresso de codificação lidam com o progresso adicional.
Codificando 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
Contentores
Blobs
- Definir metadados de blob
- Copiar blob
- Excluir blob
- Alterar camada de acesso de blob
- Obter blob SAS URL
- Analise o blob, por exemplo, via MediaInfo
Notificações de Blob
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. OHandlesEvent
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
, ouArchive
. - A
rehydratePriority
propriedade éStandard
ouHigh
.
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
, BlobContainer
ou 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 nalogEventMessage
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:
- Sistema de mídia em nuvem Gridwich
- O que é o armazenamento de Blob do Azure?
- O que é o Azure Logic Apps?
Módulos do Microsoft Learn: