Cenário: Enviando Mensagens da Fila para uma Função

Integre a Fila com o Functions usando o Connector Hub.

Esse cenário envolve a criação de uma função e, em seguida, fazer referência a essa função como destino em um conector (Connector Hub) para receber e processar mensagens de filas.

Enviando mensagens de fila para uma função.

O payload recebido pela função contém apenas mensagens da fila.

Para obter um tutorial relacionado, consulte Usar o OCI Functions e o OCI Queue para Autorizar Recursos do Usuário sem Expor o Privilégio de Administrador a Aprovadores.

Para obter ajuda com a solução de problemas, consulte Solucionando Problemas de Conectores.

Política Obrigatória do Serviço IAM

Se você for membro do grupo Administradores, já terá o acesso necessário para executar esse cenário. Caso contrário, você precisará acessar o serviço Functions.

O workflow para criar o conector inclui uma política padrão quando necessário para fornecer permissão para gravar no serviço de destino. Se você não estiver familiarizado com políticas, consulte Visão Geral de Políticas do Serviço IAM.

Tratamento de erros ao processar filas

Observação

No contexto de mensagens de fila enviadas para funções, não há suporte para falhas parciais durante o processamento de mensagens em um batch.

Quando uma função que está processando um batch de mensagens de uma fila encontra um erro, todas as mensagens desse batch ficam visíveis na fila novamente, incluindo mensagens que a função processou com sucesso. Portanto, uma mensagem pode ser processada pela função várias vezes. Como acontece com qualquer destino, o conector continua repetindo indefinidamente até que o destino da função seja bem-sucedido. Para obter mais informações, consulte Detalhes da Entrega.

Se ocorrer uma falha durante o processamento de um lote de mensagens, a contagem de entregas dessas mensagens ainda será aumentada. Se a contagem de entregas de uma mensagem atingir o máximo definido no nível da fila, a mensagem será enviada para a fila de mensagens não processadas. Para obter mais informações, consulte Contagem de entregas.

Para evitar o reprocessamento de mensagens, torne sua função idempotente.

    1. Na página da lista Conectores, selecione Criar conector. Se precisar de ajuda para localizar a página da lista, consulte Listando Conectores.
    2. Na página Criar conector, digite um nome amigável para o novo conector e uma descrição opcional. Evite digitar informações confidenciais.
    3. Selecione o compartimento no qual você deseja armazenar o novo conector.
    4. Em Configurar conector, para Origem, selecione Fila.
    5. Para Alvo, selecione Funções.
    6. Em Configurar conexão de origem, selecione a fila que contém as mensagens desejadas:
      • Compartimento: Selecione o compartimento que contém a fila desejada.
      • Fila: selecione a fila que contém as mensagens que deseja.
        Observação

        Para selecionar uma fila para um conector, você deve ter autorização para ler a fila. Consulte Políticas do Serviço IAM (Protegendo o Connector Hub).
      • Filtro de Canal (em Filtragem de mensagem) (opcional): para filtrar mensagens de canais na fila, informe um valor.

        Por exemplo, para filtrar mensagens por ID do canal, informe o ID do canal.

        Para obter os valores suportados, consulte channelFilter em GetMessages (API do serviço Queue).

      Observação

      Uma mensagem que foi transferida para o destino do conector é considerada "consumida". Para atender aos requisitos do serviço Queue, o conector exclui mensagens transferidas da fila de origem. Para obter mais informações, consulte Como Consumir Mensagens.
    7. Em Configurar destino, configure a função para a qual enviar as mensagens da fila.
      • Compartimento: selecione o compartimento que contém a função desejada.
      • Aplicativo de função: selecione o nome do aplicativo de função que contém a função desejada.
      • Função: Selecione o nome da função para a qual você deseja enviar os dados.
      • Mostrar opções adicionais: Selecione este link e especifique limites para cada batch de dados enviado à função. Para usar definições manuais, forneça valores para limite de tamanho do lote (KBs ou número de mensagens) e limite de tempo do lote (segundos).

        Por exemplo, limite o tamanho do lote selecionando 5.000 kilobytes ou 10 mensagens. Um exemplo de limite de tempo do batch é 5 segundos.

      Considerações:

      • O conector descarrega dados de origem como uma lista JSON em batches. O tamanho máximo do batch, ou carga útil, é de 6 MB.
      • As funções são chamadas de forma síncrona com 6 MB de dados por chamada. Se os dados excederem 6 MB, o conector chamará a função novamente para mover os dados acima do limite. Essas chamadas são tratadas sequencialmente.
      • As funções podem ser executadas por até cinco minutos. Consulte Detalhes da Entrega.
      • Não retorne dados dos destinos do serviço Functions para conectores. O Connector Hub não lê os dados retornados dos destinos do serviço Functions. Se a função retornar com sucesso sem um erro, o conector tratará as mensagens no batch como "consumidas" e excluirá essas mensagens da fila.
    8. Aceitar políticas padrão: Selecione o link Criar fornecido para cada política padrão.
    9. Selecione Criar.
    O processo de criação é iniciado e seu progresso é exibido. Na conclusão, a página de detalhes do conector é aberta.
    1. Defina a origem da Fila para o conector: salve um arquivo chamado source.json.

      Exemplo de conteúdo do arquivo JSON para a origem da Fila:

      {
          "kind": "plugin",
          "pluginName": "QueueSource",
          "configMap": {
              "queueId": "<queue_OCID>"
          }
      }
    2. Defina o destino do Functions para o conector: Salve um arquivo chamado target.json.

      Exemplo de conteúdo do arquivo JSON para o destino Funções:

      {
          "kind": "functions",
          "functionId": "<function_OCID>",
          "batchSizeInKbs": "5000",
          "batchSizeInNum": "10",
          "batchTimeInSec": "60"
        }
    3. Crie o conector usando o comando oci sch service-connector create.

      Exemplo de comando, com linhas adicionadas para scannability:

      oci sch service-connector create
        --compartment-id <compartment_OCID>
        --display-name "Queues to Functions"
        --source file://source.json
        --target file://target.json
  • Execute a operação CreateServiceConnector para criar o conector.

    Exemplo de solicitação:

    POST /20200909/serviceConnectors
    Host: service-connector-hub.us-phoenix-1.oraclecloud.com
    <authorization and other headers>
    {
      "displayName": "My Queue to Function Connector",
      "compartmentId": "<compartment_OCID>",
      "description": "My connector description",
      "source": {
        "kind": "plugin",
        "pluginName": "QueueSource",
        "configMap": {
          "queueId": "<queue_OCID>"
        }
      },
      "target": {
        "kind": "functions",
        "functionId": "<function_OCID>",
        "batchSizeInKbs": "5000",
        "batchSizeInNum": "10",
        "batchTimeInSec": "60"
      }
    }

Confirmar se o Novo Conector Move Dados

Depois de criar o conector, confirme se ele está movendo dados.

  • Ativar logs do conector para obter detalhes sobre o fluxo de dados.
  • Verifique os resultados esperados no serviço de destino.

A confirmação de que os dados são movidos ajuda a evitar a desativação automática, o que acontece quando um conector falha por muito tempo.