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 C# mediante uno de los siguientes modos de C#:

  • Modelo de trabajo aislado: función de C# compilada que se ejecuta en un proceso de trabajo aislado del runtime. 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 proceso: función de C# compilada que se ejecuta en el mismo proceso que Functions Runtime.
  • 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 @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# en proceso y 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 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.

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

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