/microservice-video-encoder

This project is a video encoder microsservice written in Golang, designed as part of the final project of Full Cycle course. The project utilizes Golang's concurrency features to maximize performance and minimize encoding time.

Primary LanguageGo

Microsserviço de encoder de vídeo

Configurando ambiente

Para rodar em modo de desenvolvimento, siga os seguintes passos:

  • Duplique o arquivo .env.example para .env
  • Execute o docker-compose up -d
  • Acesse a administração do rabbitmq e crie uma exchange do tipo fannout. Ela será uma Dead Letter Exchange para receber as mensagens que não forem processadas.
  • Crie uma Dead Letter Queue e faça o binding da mesma na Dead Letter Exchange que acaba de ser criada. Não há necessidade de routing_key.
  • No arquivo .env informe o nome da Dead Letter Exchange no parâmetro: RABBITMQ_DLX
  • Crie uma conta de serviço no GCP que tenha permissão para gravar no google cloud storage. Baixe o arquivo json com as credenciais e salve-o na raiz do projeto exatamente com o nome: bucket-credential.json

Executando

Para executar o encoder rode o comando make server diretamente no container. Exemplo:

docker exec encoder-new2_app_1 make server

Sendo que microsservico-enconder_app_1 é o nome nome do container gerado pelo docker-compose.

Padrão de envio de mensagem para o encoder

Para que uma mensagem possa ser parseada pelo sistema de encoder, ela deverá chegar no seguinte formato em json:

{
  "resource_id": "my-resource-id-can-be-a-uuid-type",
  "file_path": "convite.mp4"
}
  • resource_id: Representa o ID do vídeo que você deseja converter. Ele é do tipo string.
  • file_path: É o caminho completo do vídeo mp4 dentro do bucket.

Padrão de retorno de mensagem pelo encoder

Sucesso no processamento

Para cada vídeo processado, o encoder enviará para uma exchange (a ser configurada no .env) o resultado do processamento.

Caso o processamento tenha sido concluído com sucesso, o padrão de retorno em json será:

{
    "id":"bbbdd123-ad05-4dc8-a74c-d63a0a2423d5",
    "output_bucket_path":"codeeducationtest",
    "status":"COMPLETED",
    "video":{
        "encoded_video_folder":"b3f2d41e-2c0a-4830-bd65-68227e97764f",
        "resource_id":"aadc5ff9-0b0d-13ab-4a40-a11b2eaa148c",
        "file_path":"convite.mp4"
    },
    "Error":"",
    "created_at":"2020-05-27T19:43:34.850479-04:00",
    "updated_at":"2020-05-27T19:43:38.081754-04:00"
}

Sendo que encoded_video_folder é a pasta que possui o vídeo convertido.

Erro no processamento

Caso o processamento tenha encontrado algum erro, o padrão de retorno em json será:

{
    "message": {
        "resource_id": "aadc5ff9-010d-a3ab-4a40-a11b2eaa148c",
        "file_path": "convite.mp4"
    },
    "error":"Motivo do erro"
}

Além disso, o encoder enviará para uma dead letter exchange a mensagem original que houve problema durante o processamento. Basta configurar a DLX desejada no arquivo .env no parâmetro: RABBITMQ_DLX