Compartir a través de


Introducción al desencadenador de RabbitMQ para Azure Functions

Use el desencadenador de RabbitMQ para responder a los mensajes de una cola de RabbitMQ.

Nota:

Los enlaces rabbitMQ solo son totalmente compatibles con los planes Elastic Premium y Dedicado (App Service). Todavía no se admiten los planes de consumo y consumo flexible.

Los enlaces rabbitMQ no son compatibles con el entorno de ejecución de Azure Functions v1.x.

Para obtener información sobre los detalles de instalación y configuración, vea la información general.

Ejemplo

Puede crear una función de C# mediante uno de los siguientes modos de C#:

  • Modelo de trabajo aislado: función compilada en C# que se ejecuta en un proceso trabajador aislado del tiempo de ejecución. Se requiere un proceso de trabajo aislado para admitir funciones de C# que se ejecutan en versiones de soporte técnico a largo plazo (LTS) y no LTS para .NET y .NET Framework.
  • Modelo en proceso: función de C# compilada que se ejecuta en el mismo proceso que el tiempo de ejecución de Azure Functions.
  • Script de C#: se usa principalmente al crear funciones de C# en Azure Portal.
[Function(nameof(RabbitMQFunction))]
[RabbitMQOutput(QueueName = "destinationQueue", ConnectionStringSetting = "RabbitMQConnection")]
public static string Run([RabbitMQTrigger("queue", ConnectionStringSetting = "RabbitMQConnection")] string item,
    FunctionContext context)
{
    var logger = context.GetLogger(nameof(RabbitMQFunction));

    logger.LogInformation(item);

    var message = $"Output message created at {DateTime.Now}";
    return message;
}

La siguiente función de Java usa la anotación @RabbitMQTrigger de los tipos de RabbitMQ para Java para describir la configuración de un desencadenador de cola RabbitMQ. La función toma el mensaje colocado en la cola y lo agrega a los registros.

@FunctionName("RabbitMQTriggerExample")
public void run(
    @RabbitMQTrigger(connectionStringSetting = "rabbitMQConnectionAppSetting", queueName = "queue") String input,
    final ExecutionContext context)
{
    context.getLogger().info("Java HTTP trigger processed a request." + input);
}

En el ejemplo siguiente se muestra un enlace de desencadenador de RabbitMQ en un archivo function.json y una función de JavaScript que usa el enlace. La función lee y registra un mensaje de RabbitMQ.

Estos son los datos de enlace del archivo function.json:

{​​
    "bindings": [
        {​​
            "name": "myQueueItem",
            "type": "rabbitMQTrigger",
            "direction": "in",
            "queueName": "queue",
            "connectionStringSetting": "rabbitMQConnectionAppSetting"
        }​​
    ]
}​​

Este es el código del script de JavaScript:

module.exports = async function (context, myQueueItem) {​​
    context.log('JavaScript RabbitMQ trigger function processed work item', myQueueItem);
}​​;

En el ejemplo siguiente se muestra cómo leer un mensaje de cola de RabbitMQ a través de un desencadenador.

Un enlace de RabbitMQ se define en function.json, donde type se establece en RabbitMQTrigger.

{​​
    "scriptFile": "__init__.py",
    "bindings": [
        {​​
            "name": "myQueueItem",
            "type": "rabbitMQTrigger",
            "direction": "in",
            "queueName": "queue",
            "connectionStringSetting": "rabbitMQConnectionAppSetting"
        }​​
    ]
}​​
import logging
import azure.functions as func

def main(myQueueItem) -> None:
    logging.info('Python RabbitMQ trigger function processed a queue item: %s', myQueueItem)

Los ejemplos de PowerShell no están disponibles actualmente.

Atributos

Tanto el proceso de trabajo aislado como las bibliotecas de C# en proceso usan RabbitMQTriggerAttribute para definir la función, donde las propiedades específicas del atributo dependen de la versión de la extensión.

El constructor del atributo acepta estos parámetros:

Parámetro Descripción
QueueName (Nombre de la cola) Nombre de la cola desde la que se reciben los mensajes.
Nombre de host Este parámetro ya no se admite y se omite. Se quitará en una versión futura.
ConnectionStringSetting Nombre de la configuración de la aplicación que contiene la cadena de conexión del servidor RabbitMQ. Esta configuración solo toma un nombre de clave de configuración de la aplicación, no se puede establecer directamente un valor de cadena de conexión. Para obtener más información, consulte Conexiones.
UserNameSetting Este parámetro ya no se admite y se omite. Se quitará en una versión futura.
Configuración de contraseña Este parámetro ya no se admite y se omite. Se quitará en una versión futura.
Puerto Obtiene o establece el puerto usado. El valor predeterminado es 0, que apunta a la configuración de puerto predeterminado del cliente de RabbitMQ de 5672.

anotaciones

La anotación RabbitMQTrigger permite crear una función que se ejecuta al crear un mensaje de RabbitMQ.

La anotación admite las siguientes opciones de configuración:

Parámetro Descripción
queueName Nombre de la cola desde la que se reciben los mensajes.
connectionStringSetting Nombre de la configuración de la aplicación que contiene la cadena de conexión del servidor RabbitMQ. Esta configuración solo toma un nombre de clave de configuración de la aplicación, no se puede establecer directamente un valor de cadena de conexión. Para obtener más información, consulte Conexiones.
disableCertificateValidation Valor booleano que se puede establecer para true indicar que se debe deshabilitar la validación del certificado. El valor predeterminado es false. No se recomienda para producción. No se aplica cuando SSL está deshabilitado.

Configuración

En la siguiente tabla se explican las propiedades de configuración de enlace que se establecen en el archivo function.json.

Propiedad de function.json Descripción
tipo Se debe establecer en RabbitMQTrigger.
dirección Se debe establecer en in.
nombre Nombre de la variable que representa la cola en el código de la función.
queueName Nombre de la cola desde la que se reciben los mensajes.
connectionStringSetting Nombre de la configuración de la aplicación que contiene la cadena de conexión del servidor RabbitMQ. Esta configuración solo toma un nombre de clave de configuración de la aplicación, no se puede establecer directamente un valor de cadena de conexión. Para obtener más información, consulte Conexiones.
disableCertificateValidation Valor booleano que se puede establecer para true indicar que se debe deshabilitar la validación del certificado. El valor predeterminado es false. No se recomienda para producción. No se aplica cuando SSL está deshabilitado.

Cuando esté desarrollando localmente, agregue la configuración de la aplicación en el archivo local.settings.json de la colección Values.

Consulte la sección de ejemplos para ver ejemplos completos.

Uso

El tipo de parámetro admitido por el desencadenador RabbitMQ depende de la modalidad de C# usada.

Actualmente, los enlaces de RabbitMQ solo admiten tipos de objeto serializables y de cadena cuando se ejecutan en un proceso aislado.

El mensaje de cola está disponible mediante context.bindings.<NAME>, donde <NAME> coincide con el nombre definido en function.json. Si la carga es JSON, el valor se deserializa en un objeto.

Connections

Importante

El enlace rabbitMQ no admite la autenticación y las identidades administradas de Microsoft Entra. Puede usar Azure Key Vault para administrar centralmente los cadena de conexión rabbitMQ. Para más información, consulte Administración de conexiones.

A partir de la versión 2.x de la extensión, hostName, userNameSettingy passwordSetting ya no se admiten para definir una conexión al servidor RabbitMQ. En su lugar, debe usar connectionStringSetting.

La connectionStringSetting propiedad solo puede aceptar el nombre de un par clave-valor en la configuración de la aplicación. No se puede establecer directamente un valor de cadena de conexión en el enlace.

Por ejemplo, cuando se ha establecido connectionStringSettingrabbitMQConnection en en la definición de enlace, la aplicación de funciones debe tener una configuración de aplicación denominada rabbitMQConnection que devuelva un valor de conexión como amqp://myuser:***@contoso.rabbitmq.example.com:5672 o una referencia de Azure Key Vault.

Al ejecutar localmente, también debe tener el valor de clave para connectionStringSetting definido en el archivo local.settings.json . De lo contrario, la aplicación no puede conectarse al servicio desde el equipo local y se produce un error.

Colas de mensajes fallidos

Las colas de mensajes fallidos y los intercambios no se pueden controlar ni configurar desde el desencadenador de RabbitMQ. Para usar colas de mensajes fallidos, configure previamente la cola utilizada por el desencadenador en RabbitMQ. Consulte la documentación de RabbitMQ.

Habilitación del escalado de tiempo de ejecución

Para que el desencadenador de RabbitMQ se escale horizontalmente a varias instancias, debe estar habilitada la configuración Runtime Scale Monitoring (Supervisión de la escala de tiempo de ejecución).

En el portal, esta configuración se puede encontrar en Configuración>Configuración del tiempo de ejecución de la función para la aplicación de funciones.

VNETToggle

En la CLI de Azure, puede habilitar la supervisión de escalado en tiempo de ejecución mediante este comando:

az resource update -resource-group <RESOURCE_GROUP> -name <APP_NAME>/config/web \
    --set properties.functionsRuntimeScaleMonitoringEnabled=1 \
    --resource-type Microsoft.Web/sites

Supervisión de un punto de conexión de RabbitMQ

Para supervisar las colas e intercambios de un determinado punto de conexión de RabbitMQ:

Artículo relacionado