Información general sobre los enlaces de salid 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 enlace de salida de RabbitMQ para enviar mensajes a 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 de C# mediante uno de los siguientes modos de C#:

  • Biblioteca de clases en proceso: función de C# compilada que se ejecuta en el mismo proceso que Functions Runtime.
  • Biblioteca de clases de procesos aislados: función de C# compilada que se ejecuta en un proceso aislado del entorno en tiempo de ejecución. Se requiere un proceso aislado para admitir las funciones de C# que se ejecutan en .NET 5.0.
  • Script de C#: se usa principalmente al crear funciones de C# en Azure Portal.

En el ejemplo siguiente se muestra una función de C# que envía un mensaje RabbitMQ cuando lo desencadena un desencadenador TimerTrigger cada 5 minutos usando el valor devuelto del método como salida:

[FunctionName("RabbitMQOutput")]
[return: RabbitMQ(QueueName = "outputQueue", ConnectionStringSetting = "rabbitMQConnectionAppSetting")]
public static string Run([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer, ILogger log)
{
    log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
    return $"{DateTime.Now}";
}

En el ejemplo siguiente se muestra cómo utilizar la interfaz IAsyncCollector para enviar mensajes.

[FunctionName("RabbitMQOutput")]
public static async Task Run(
[RabbitMQTrigger("sourceQueue", ConnectionStringSetting = "rabbitMQConnectionAppSetting")] string rabbitMQEvent,
[RabbitMQ(QueueName = "destinationQueue", ConnectionStringSetting = "rabbitMQConnectionAppSetting")]IAsyncCollector<string> outputEvents,
ILogger log)
{
     // send the message
    await outputEvents.AddAsync(JsonConvert.SerializeObject(rabbitMQEvent));
}

En el ejemplo siguiente se muestra cómo enviar los mensajes como POCO.

namespace Company.Function
{
    public class TestClass
    {
        public string x { get; set; }
    }
    public static class RabbitMQOutput{
        [FunctionName("RabbitMQOutput")]
        public static async Task Run(
        [RabbitMQTrigger("sourceQueue", ConnectionStringSetting = "rabbitMQConnectionAppSetting")] TestClass rabbitMQEvent,
        [RabbitMQ(QueueName = "destinationQueue", ConnectionStringSetting = "rabbitMQConnectionAppSetting")]IAsyncCollector<TestClass> outputPocObj,
        ILogger log)
        {
            // send the message
            await outputPocObj.AddAsync(rabbitMQEvent);
        }
    }
}

La siguiente función de Java usa la anotación @RabbitMQOutput de los @RabbitMQOutput para describir la configuración de un enlace de salida de la cola de RabbitMQ. La función envía un mensaje a la cola de RabbitMQ cuando se desencadena mediante TimerTrigger cada cinco minutos.

@FunctionName("RabbitMQOutputExample")
public void run(
@TimerTrigger(name = "keepAliveTrigger", schedule = "0 */5 * * * *") String timerInfo,
@RabbitMQOutput(connectionStringSetting = "rabbitMQConnectionAppSetting", queueName = "hello") OutputBinding<String> output,
final ExecutionContext context) {
    output.setValue("Some string");
}

En el ejemplo siguiente se muestra un enlace de salida de RabbitMQ en un archivo function.json y una función de JavaScript que usa el enlace. La función lee el mensaje desde un desencadenador HTTP y lo envía a la cola de RabbitMQ.

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

{
    "bindings": [
        {
            "type": "httpTrigger",
            "direction": "in",
            "authLevel": "function",
            "name": "input",
            "methods": [
                "get",
                "post"
            ]
        },
        {
            "type": "rabbitMQ",
            "name": "outputMessage",
            "queueName": "outputQueue",
            "connectionStringSetting": "rabbitMQConnectionAppSetting",
            "direction": "out"
        }
    ]
}

Este es el código de JavaScript:

module.exports = async function (context, input) {
    context.bindings.outputMessage = input.body;
};

En el ejemplo siguiente se muestra un enlace de entrada de RabbitMQ en un archivo function.json y una función de Python que usa el enlace. La función lee el mensaje desde un desencadenador HTTP y lo envía a la cola de RabbitMQ.

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

{
    "scriptFile": "__init__.py",
    "bindings": [
        {
            "authLevel": "function",
            "type": "httpTrigger",
            "direction": "in",
            "name": "req",
            "methods": [
                "get",
                "post"
            ]
        },
        {
            "type": "http",
            "direction": "out",
            "name": "$return"
        },​​
        {
            "type": "rabbitMQ",
            "name": "outputMessage",
            "queueName": "outputQueue",
            "connectionStringSetting": "rabbitMQConnectionAppSetting",
            "direction": "out"
        }
    ]
}

En _init_.py:

import azure.functions as func

def main(req: func.HttpRequest, outputMessage: func.Out[str]) -> func.HttpResponse:
    input_msg = req.params.get('message')
    outputMessage.set(input_msg)
    return 'OK'

Atributos

Las bibliotecas de C# de procesos aislados y en proceso 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 Bibliotecas de clase C#, use RabbitMQAttribute.

Este es un atributo RabbitMQTrigger en una firma de método para una biblioteca en proceso:

[FunctionName("RabbitMQOutput")]
public static async Task Run(
[RabbitMQTrigger("SourceQueue", ConnectionStringSetting = "TriggerConnectionString")] string rabbitMQEvent,
[RabbitMQ("DestinationQueue", ConnectionStringSetting = "OutputConnectionString")]IAsyncCollector<string> outputEvents,
ILogger log)
{
    ...
}

anotaciones

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

La anotación admite las siguientes configuración:

Configuración 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.

Vea el ejemplo de enlace de salida para obtener más detalles.

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 RabbitMQ.
direction Se debe establecer en out.
name Nombre de la variable que representa la cola en el código de la función.
queueName Nombre de la cola a la que se van a enviar mensajes.
hostName Nombre de host de la cola, por ejemplo, 10.26.45.210. Se omite cuando se usa connectStringSetting.
userName 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.
password Nombre de la configuración de la aplicación que contiene la contraseña para acceder a la cola, como UserNameSetting: "< UserNameFromSettings >". 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 en local.settings.json. Por ejemplo, si ha definido connectionStringSetting: "rabbitMQConnection", entonces tanto en el local.settings.json 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 .

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

Uso

El tipo de parámetro admitido por el desencadenador de RabbitMQ depende de la versión del tiempo de ejecución de Functions, la versión del paquete de extensión y la modalidad de C# utilizada.

Puede usar los siguientes tipos de parámetro para el enlace de salida:

  • byte[] - Si el valor del parámetro es null cuando finaliza la función, Functions no crea ningún mensaje.
  • string - Si el valor del parámetro es null cuando finaliza la función, Functions no crea ningún mensaje.
  • POCO: el mensaje tiene el formato de un objeto de C#.

Cuando trabaje con funciones de C#:

  • Las funciones asincrónicas necesitan un valor devuelto o IAsyncCollector, en lugar de un parámetro out.

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

Puede usar los siguientes tipos de parámetro para el enlace de salida:

  • byte[] - Si el valor del parámetro es null cuando finaliza la función, Functions no crea ningún mensaje.
  • string - Si el valor del parámetro es null cuando finaliza la función, Functions no crea ningún mensaje.
  • POJO: si el valor del parámetro no tiene el formato de objeto Java, se recibirá un error.

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.

Pasos siguientes