Introducción al desencadenador de RabbitMQ para Azure Functions

Nota

Los enlaces de RabbitMQ solo se admiten por completo en planes Premium y Dedicado. El consumo no se admite.

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

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

Ejemplo

Se puede crear una función 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# ejecutándose en versiones de .NET que son y no son LTS y .NET Framework.
  • Modelo en curso: función C# compilada que se ejecuta en el mismo proceso que el tiempo de ejecución de 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)

Atributos

Tanto las bibliotecas de C# en proceso como las de proceso de trabajo aislado usan el atributo para definir la función. El script de C#, en su lugar, usa un archivo de configuración function.json.

El constructor del atributo toma los parámetros siguientes:

Parámetro Descripción
QueueName Nombre de la cola desde la que se reciben los mensajes.
HostName Nombre de host de la cola, por ejemplo, 10.26.45.210. Se omite cuando se usa ConnectStringSetting.
UserNameSetting Nombre de la configuración de la aplicación que contiene el nombre de usuario para acceder a la cola, como UserNameSetting: "%< UserNameFromSettings >%". Se omite cuando se usa ConnectStringSetting.
PasswordSetting Nombre de la configuración de la aplicación que contiene la contraseña para acceder a la cola, como PasswordSetting: "%< PasswordFromSettings >%". Se omite cuando se usa ConnectStringSetting.
ConnectionStringSetting El nombre de la configuración de la aplicación que contiene la cadena de conexión de la cola de mensajes RabbitMQ. El desencadenador no funcionará cuando especifique la cadena de conexión directamente en lugar de hacerlo a través de una configuración de la aplicación. Por ejemplo, si ha definido ConnectionStringSetting: "rabbitMQConnection", entonces tanto en el ConnectionStringSetting: "rabbitMQConnection" como en su aplicación de funciones necesitará una configuración como "RabbitMQConnection" : "< ActualConnectionstring >".
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.

En las bibliotecas de clases de C#, use el atributo RabbitMQTrigger.

Este es un atributo RabbitMQTrigger en una firma de método para una biblioteca de procesos de trabajo aislados:

[Function(nameof(RabbitMQFunction))]
[RabbitMQOutput(QueueName = "destinationQueue", ConnectionStringSetting = "RabbitMQConnection")]
public static string Run([RabbitMQTrigger("queue", ConnectionStringSetting = "RabbitMQConnection")] string item,
    FunctionContext context)
{

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.
hostName Nombre de host de la cola, por ejemplo, 10.26.45.210. Se omite cuando se usa ConnectStringSetting.
userNameSetting Nombre de la configuración de la aplicación que contiene el nombre de usuario para acceder a la cola, como UserNameSetting: "%< UserNameFromSettings >%". Se omite cuando se usa ConnectStringSetting.
passwordSetting Nombre de la configuración de la aplicación que contiene la contraseña para acceder a la cola, como PasswordSetting: "%< PasswordFromSettings >%". Se omite cuando se usa ConnectStringSetting.
connectionStringSetting El nombre de la configuración de la aplicación que contiene la cadena de conexión de la cola de mensajes RabbitMQ. El desencadenador no funcionará cuando especifique la cadena de conexión directamente en lugar de hacerlo a través de una configuración de la aplicación. Por ejemplo, si ha definido ConnectionStringSetting: "rabbitMQConnection", entonces tanto en el ConnectionStringSetting: "rabbitMQConnection" como en su aplicación de funciones necesitará una configuración como "RabbitMQConnection" : "< ActualConnectionstring >".
port 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.

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
type Se debe establecer en RabbitMQTrigger.
direction Se debe establecer en in.
name 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.
hostName Nombre de host de la cola, por ejemplo, 10.26.45.210. Se omite cuando se usa connectStringSetting.
userNameSetting Nombre de la configuración de la aplicación que contiene el nombre de usuario para acceder a la cola, como UserNameSetting: "%< UserNameFromSettings >%". Se omite cuando se usa connectStringSetting.
passwordSetting Nombre de la configuración de la aplicación que contiene la contraseña para acceder a la cola, como PasswordSetting: "%< PasswordFromSettings >%". Se omite cuando se usa connectStringSetting.
connectionStringSetting El nombre de la configuración de la aplicación que contiene la cadena de conexión de la cola de mensajes RabbitMQ. El desencadenador no funcionará cuando especifique la cadena de conexión directamente en lugar de hacerlo a través de una configuración de la aplicación. Por ejemplo, si ha definido connectionStringSetting: "rabbitMQConnection", entonces tanto en el connectionStringSetting: "rabbitMQConnection" como en su aplicación de funciones necesitará una configuración como "rabbitMQConnection" : "< ActualConnectionstring >".
port 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.

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.

Para ver un ejemplo completo, consulte el ejemplo de C#.

Consulte las anotaciones de Java.

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.

Consulte el ejemplo de Python.

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.

configuración de host.json

En esta sección se describen las opciones de configuración disponibles para este enlace en las versiones 2.x y posteriores. La configuración del archivo host.json se aplica a todas las funciones de una instancia de la aplicación de funciones. El siguiente archivo host.json de ejemplo contiene solo la configuración de la versión 2.x+ para este enlace. Para obtener más información sobre la configuración de la aplicación de funciones en las versiones 2.x y posteriores, consulte la referencia de host.json para Azure Functions.

{
    "version": "2.0",
    "extensions": {
        "rabbitMQ": {
            "prefetchCount": 100,
            "queueName": "queue",
            "connectionString": "amqp://user:password@url:port",
            "port": 10
        }
    }
}
Propiedad Valor predeterminado Descripción
prefetchCount 30 Obtiene o establece el número de mensajes que el destinatario del mensaje puede solicitar simultáneamente y lo almacena en caché.
queueName N/D Nombre de la cola desde la que se reciben los mensajes.
connectionString N/D La cadena de conexión de la cola de mensajes de RabbitMQ. La cadena de conexión se especifica directamente aquí y no a través de una configuración de aplicación.
port 0 (se omite si se usa connectionString) Obtiene o establece el puerto utilizado. El valor predeterminado es 0, que apunta a la configuración de puerto predeterminado del cliente de rabbitmq: 5672.

Pruebas locales

Nota

connectionString tiene prioridad sobre "hostName", "userName" y "password". Si todos están establecidos, connectionString invalidará a los otros dos.

Si está realizando una prueba de forma local sin una cadena de conexión, debería configurar los valores "hostName", "userName" y "password" si es aplicable en la sección "rabbitMQ" de host.json:

{
    "version": "2.0",
    "extensions": {
        "rabbitMQ": {
            ...
            "hostName": "localhost",
            "username": "userNameSetting",
            "password": "passwordSetting"
        }
    }
}
Propiedad Valor predeterminado Descripción
hostName N/D (se omite si se usa connectionString)
Nombre de host de la cola (por ejemplo: 10.26.45.210)
userName N/D (se omite si se usa connectionString)
Nombre para acceder a la cola
password N/D (se omite si se usa connectionString)
Contraseña para acceder la cola

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, puede habilitar Runtime Scale Monitoring (Supervisión de la escala de tiempo de ejecución) mediante el comando siguiente:

az resource update -g <resource_group> -n <function_app_name>/config/web --set properties.functionsRuntimeScaleMonitoringEnabled=1 --resource-type Microsoft.Web/sites

Supervisión del punto de conexión de RabbitMQ

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

Pasos siguientes