Configuración de tareas de larga duración mediante una llamada a flujos de trabajo de aplicaciones lógicas con Azure Functions

Se aplica a: Azure Logic Apps (consumo)

Cuando necesite implementar un agente de escucha o una tarea de ejecución prolongada, puede crear un flujo de trabajo de aplicación lógica que use el desencadenador Request y Azure Functions para llamar a ese desencadenador y ejecutar el flujo de trabajo.

Por ejemplo, puede crear una función que escuche los mensajes que llegan a una cola de Azure Service Bus. Cuando se produce este evento, la función llama al desencadenador Request, que funciona como desencadenador de push para ejecutar automáticamente el flujo de trabajo.

En esta guía paso a paso se muestra cómo crear un flujo de trabajo de aplicación lógica que comience con el desencadenador Request. A continuación, creará una función que escuche una cola de Service Bus. Cuando un mensaje llega a la cola, la función llama al punto de conexión creado por el desencadenador Request para ejecutar el flujo de trabajo.

Nota

Aunque puede implementar este comportamiento mediante un flujo de trabajo de aplicación lógica de consumo o estándar, este ejemplo continúa con un flujo de trabajo de consumo.

Prerrequisitos

Creación de un flujo de trabajo de aplicación lógica

  1. En Azure Portal, cree una aplicación lógica en blanco de consumo seleccionando la plantilla Aplicación lógica en blanco.

  2. Después de que se abra el diseñador, en el cuadro de búsqueda del diseñador, seleccione Integrado. En el cuadro de búsqueda, escriba request.

  3. En la lista de desencadenadores, seleccione el desencadenador denominado Cuando se recibe una solicitud HTTP.

    Captura de pantalla del diseñador en el portal. El cuadro de búsqueda contiene “http request”. En “Desencadenadores”, la opción “Cuando se reciba una solicitud HTTP” está resaltada.

    En el desencadenador de solicitud, puede escribir, si lo desea, un esquema JSON para usarlo con el mensaje de la cola. Los esquemas JSON ayudan al diseñador a conocer la estructura de los datos de entrada y facilitan el uso de las salidas en el flujo de trabajo.

  4. Para especificar un esquema, especifique el esquema en el cuadro Esquema JSON del cuerpo de la solicitud.

    Captura de pantalla de los detalles de un desencadenador de solicitud HTTP. Se puede ver código JSON en el cuadro “Esquema JSON del cuerpo de la solicitud”.

    Si no tiene un esquema, pero tiene una carga de ejemplo en formato JSON, puede generar un esquema a partir de dicha carga.

    1. En el desencadenador de solicitud, seleccione Use sample payload to generate schema (Usar una carga de ejemplo para generar el esquema).

    2. En Permite especificar o pegar una carga de JSON de ejemplo, proporcione una carga de ejemplo y luego seleccione Listo.

      Captura de pantalla de los detalles de un desencadenador de solicitud HTTP. Se pueden ver datos de carga en “Escriba o copie una carga JSON de ejemplo”.

      La carga de ejemplo que se muestra anteriormente genera el esquema siguiente, que aparece en el desencadenador:

      {
         "type": "object",
         "properties": {
            "address": {
               "type": "object",
               "properties": {
                  "number": {
                     "type": "integer"
                  },
                  "street": {
                     "type": "string"
                  },
                  "city": {
                     "type": "string"
                  },
                  "postalCode": {
                     "type": "integer"
                  },
                  "country": {
                     "type": "string"
                  }
               }
            }
         }
      }
      
  5. En el desencadenador, agregue cualquier otra acción que quiera usar para procesar el mensaje recibido.

    Por ejemplo, puede agregar una acción que envíe correo electrónico con el conector Office 365 Outlook.

  6. Guarde el flujo de trabajo de la aplicación lógica.

    Este paso genera la dirección URL de devolución de llamada para el desencadenador Request en el flujo de trabajo. Más adelante, use esta dirección URL de devolución de llamada en el código para el desencadenador de cola de Azure Service Bus. Esta dirección URL aparece en la propiedad HTTP POST URL.

    Captura de pantalla de los detalles de un desencadenador de solicitud HTTP. Se ve una dirección URL junto a “Dirección URL HTTP POST”.

Creación de una función

A continuación, cree la función que escucha la cola y llama al punto de conexión en el desencadenador Request cuando llega un mensaje.

  1. En Azure Portal, abra la aplicación de funciones.

  2. En el menú de navegación de la aplicación de funciones, seleccione Funciones. En el panel Funciones, seleccione Crear.

    Captura de pantalla de una aplicación de funciones con la opción “Funciones” resaltada en el menú de la aplicación de funciones. Se abre la página “Funciones” y se resalta “Crear”.

  3. En Seleccionar una plantilla, seleccione la plantilla denominada Desencadenador de cola de Azure Service Bus. Una vez que aparezca la sección Detalles de la plantilla, que muestra diferentes opciones en función de la selección de la plantilla, proporcione la siguiente información:

    Propiedad Valor Descripción
    Nueva función <function-name> Escriba un nombre para la función.
    Conexión de Service Bus <Service-Bus-connection> Seleccione Nuevo para configurar la conexión de la cola de Service Bus, que usa el agente de escucha OnMessageReceive() del SDK de Service Bus.
    Nombre de la cola <queue-name> Escriba el nombre de la cola.

    Captura de pantalla del panel “Crear función” con la opción “Desencadenador de cola de Azure Service Bus” resaltada y los detalles de ejemplo de la plantilla especificados.

  4. Seleccione Crear cuando haya terminado.

    Azure Portal ahora muestra la página Información general de la nueva función de desencadenador de cola de Azure Service Bus.

  5. Ahora, escriba una función básica para llamar al punto de conexión del flujo de trabajo de la aplicación lógica que ha creado anteriormente. Antes de escribir la función, revise las consideraciones siguientes:

    • Desencadene la función mediante el mensaje del mensaje de cola.

    • Debido a la posible ejecución simultánea de funciones, grandes volúmenes o cargas pesadas, evite crear instancias de la clase HTTPClient con lausing instrucción y crear directamente instancias de HTTPClient por solicitud. Para obtener más información, consulte el artículo sobre el uso de HttpClientFactory para implementar solicitudes HTTP resistentes.

    • Si es posible, vuelva a usar la instancia de los clientes HTTP. Para más información, consulte Manage connections in Azure Functions (Administración de conexiones en Azure Functions).

    En el ejemplo siguiente se utiliza el método Task.Run en modo asincrónico. Para obtener más información, consulte Programación asincrónica con Async y Await. En el ejemplo también se usa el tipo de contenido de mensaje application/json, pero puede cambiarlo si es necesario.

    using System;
    using System.Threading.Tasks;
    using System.Net.Http;
    using System.Text;
    
    // Set up the URI for the logic app workflow. You can also get this value on the logic app's 'Overview' pane, under the trigger history, or from an environment variable.
    private static string logicAppUri = @"https://prod-05.westus.logic.azure.com:443/workflows/<remaining-callback-URL>";
    
    // Reuse the instance of HTTP clients if possible. For more information, see https://learn.microsoft.com/azure/azure-functions/manage-connections.
    private static HttpClient httpClient = new HttpClient();
    
    public static async Task Run(string myQueueItem, TraceWriter log) 
    {
       log.Info($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
       var response = await httpClient.PostAsync(logicAppUri, new StringContent(myQueueItem, Encoding.UTF8, "application/json")); 
    }
    

Comprobación del flujo de trabajo de la aplicación lógica

Para realizar pruebas, agregue un mensaje a la cola de Service Bus mediante los pasos siguientes u otra herramienta:

  1. En Azure Portal, abra el espacio de nombres de Service Bus.

  2. En el menú de navegación del espacio de nombres de Service Bus, seleccione Colas.

    Captura de pantalla de un espacio de nombres de Service Bus. En el menú de navegación, el elemento “Colas” está resaltado.

  3. Seleccione la cola de Service Bus que ha vinculado a la función anteriormente mediante una conexión de Service Bus.

  4. En el menú de navegación de la cola, seleccione Service Bus Explorer y, después, en la barra de herramientas, seleccione Enviar mensajes.

    Captura de pantalla de una página de cola de Service Bus en el portal, con el elemento “Enviar mensajes” resaltado. En el menú de navegación, “Service Bus Explorer” está resaltado.

  5. En el panel Enviar mensajes, especifique el mensaje que se va a enviar a la cola de Service Bus.

    Este mensaje desencadena el flujo de trabajo de la aplicación lógica.

Pasos siguientes