Escenario: Envío de mensajes de cola a una función

Integre la cola con Functions mediante Connector Hub.

Este escenario implica la creación de una función y, a continuación, la referencia a esa función como destino en un conector (Connector Hub) para recibir y procesar mensajes de colas.

Envío de mensajes de cola a una función.

La carga útil recibida por la función solo contiene mensajes de la cola.

Para obtener un tutorial relacionado, consulte Uso de OCI Functions y OCI Queue para autorizar capacidades de usuario sin exponer el privilegio de administrador a los aprobadores.

Para obtener ayuda con la resolución de problemas, consulte Resolución de problemas de conectores.

Política de IAM necesaria

Si es miembro del grupo Administradores, ya tendrá el acceso necesario para ejecutar este escenario. De lo contrario, necesita acceso a Functions.

El flujo de trabajo para crear el conector incluye una política por defecto cuando es necesario para proporcionar permiso para escribir en el servicio de destino. Si no conoce las políticas, consulte Visión general de las políticas de IAM.

Manejo de errores al procesar colas

Nota

En el contexto de los mensajes de cola enviados a funciones, no se soportan fallos parciales durante el procesamiento de mensajes dentro de un lote.

Cuando una función que está procesando un lote de mensajes de una cola encuentra un error, todos los mensajes de ese lote vuelven a estar visibles en la cola, incluidos los mensajes que la función ha procesado correctamente. Por lo tanto, la función podría procesar un mensaje varias veces. Al igual que con cualquier destino, el conector sigue reintentando indefinidamente hasta que el destino de función se realiza correctamente. Para más información, consulte Detalles de entrega.

Si se produce un fallo al procesar un lote de mensajes, el recuento de entrega de esos mensajes sigue aumentando. Si el recuento de entrega de un mensaje alcanza el máximo definido en el nivel de cola, el mensaje se envía a la cola de mensajes con problemas de entrega. Para obtener más información, consulte Recuento de entregas.

Para evitar el reprocesamiento de mensajes, haga que su función sea idempotente.

    1. En la página de lista Conectores, seleccione Crear conector. Si necesita ayuda para buscar la página de lista, consulte Listado de conectores.
    2. En la página Crear conector, introduzca un nombre fácil de recordar para el nuevo conector y una descripción opcional. Evite introducir información confidencial.
    3. Seleccione el compartimento en el que desea almacenar el nuevo conector.
    4. En Configurar conector, en Origen, seleccione Cola.
    5. En Destino, seleccione Funciones.
    6. En Configurar conexión de origen, seleccione la cola que contiene los mensajes que desea:
      • Compartimento: seleccione el compartimento que contiene la cola que desea.
      • Cola: seleccione la cola que contiene los mensajes que desea.
        Nota

        Para seleccionar una cola para un conector, debe tener autorización para leer la cola. Consulte Políticas de IAM (protección de Connector Hub).
      • Filtro de canal (en Filtrado de mensajes) (opcional): para filtrar mensajes de canales de la cola, introduzca un valor.

        Por ejemplo, para filtrar mensajes por ID de canal, introduzca el ID de canal.

        Para conocer los valores soportados, consulte channelFilter en GetMessages (API de Queue).

      Nota

      Un mensaje que se ha transferido al destino del conector se considera "consumido". Para cumplir los requisitos del servicio Queue, el conector suprime los mensajes transferidos de la cola de origen. Para obtener más información, consulte Uso de mensajes.
    7. En Configurar destino, configure la función para enviar los mensajes de la cola.
      • Compartimento: seleccione el compartimento que contiene la función que desea.
      • Aplicación de función: seleccione el nombre de la aplicación de función que contiene la función que desea.
      • Función: seleccione el nombre de la función a la que desea enviar los datos.
      • Mostrar opciones adicionales: seleccione este enlace y especifique límites para cada lote de datos enviado a la función. Para utilizar la configuración manual, proporcione valores para el límite de tamaño de lote (ya sea KB o número de mensajes) y el límite de tiempo de lote (segundos).

        Por ejemplo, limite el tamaño del lote seleccionando 5.000 kilobytes o 10 mensajes. Un límite de tiempo de lote de ejemplo es de 5 segundos.

      Consideraciones:

      • El conector vacía los datos de origen como una lista de JSON en lotes. El tamaño máximo de lote o carga útil es de 6 MB.
      • Las funciones se llaman de forma síncrona con 6 MB de datos por llamada. Si los datos superan los 6 MB, el conector llama de nuevo a la función para mover los datos que superen el límite. Estas llamadas se manejan secuencialmente.
      • Las funciones se pueden ejecutar durante un máximo de cinco minutos. Consulte Detalles de entrega.
      • No devuelve datos de destinos de Functions a conectores. El hub de conector no lee los datos devueltos de los destinos de Functions. Si la función se devuelve correctamente sin ningún error, el conector trata los mensajes del lote como "consumidos" y suprime esos mensajes de la cola.
    8. Aceptar políticas por defecto: seleccione el enlace Crear proporcionado para cada política por defecto.
    9. Haga clic en Crear.
    Comienza el proceso de creación y se muestra su progreso. Al finalizar, se abre la página de detalles del conector.
    1. Defina el origen de cola para el conector: guarde un archivo denominado source.json.

      Contenido de archivo JSON de ejemplo para el origen de cola:

      {
          "kind": "plugin",
          "pluginName": "QueueSource",
          "configMap": {
              "queueId": "<queue_OCID>"
          }
      }
    2. Defina el destino de Functions para el conector: guarde un archivo denominado target.json.

      Contenido de archivo JSON de ejemplo para el destino Functions:

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

      Comando de ejemplo, con líneas agregadas para escaneabilidad:

      oci sch service-connector create
        --compartment-id <compartment_OCID>
        --display-name "Queues to Functions"
        --source file://source.json
        --target file://target.json
  • Ejecute la operación CreateServiceConnector para crear el conector.

    Solicitud de ejemplo:

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

Confirmación de que el nuevo conector mueve datos

Después de crear el conector, confirme que está moviendo datos.

  • Activar logs para que el conector obtenga detalles sobre el flujo de datos.
  • Compruebe los resultados esperados en el servicio de destino.

La confirmación de que los datos se mueven ayuda a evitar la desactivación automática, que ocurre cuando un conector falla durante mucho tiempo.