Ligação de saída RabbitMQ para Funções do Azure visão geral

Nota

As ligações RabbitMQ só são totalmente suportadas em planos Premium e dedicados. O consumo não é suportado.

Utilize a ligação de saída RabbitMQ para enviar mensagens para uma fila RabbitMQ.

Para obter informações sobre detalhes de configuração e configuração, consulte a visão geral.

Exemplo

Uma função C# pode ser criada utilizando um dos seguintes modos C# :

  • Biblioteca de classe em processo: função C# compilada que funciona no mesmo processo que o tempo de funcionamento das Funções.
  • Biblioteca de classe de processo isolada: função C# compilada que funciona num processo isolado do tempo de funcionamento. É necessário um processo isolado para suportar as funções C# em execução em .NET 5.0.
  • Guião C#: utilizado principalmente para criar funções C# no portal do Azure.

O exemplo a seguir mostra uma função C# que envia uma mensagem RabbitMQ quando acionada por um TimerTrigger a cada 5 minutos utilizando o valor de retorno do método como saída:

[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}";
}

O exemplo a seguir mostra como utilizar a interface IAsyncCollector para enviar mensagens.

[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));
}

O exemplo a seguir mostra como enviar as mensagens como POCOs.

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);
        }
    }
}

A seguinte função Java utiliza a @RabbitMQOutput anotação dos tipos Java RabbitMQ para descrever a configuração para uma ligação de saída de fila RabbitMQ. A função envia uma mensagem para a fila RabbitMQ quando acionada por um TimerTrigger a cada 5 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");
}

O exemplo a seguir mostra uma ligação de saída RabbitMQ num ficheiro function.json e numa função JavaScript que utiliza a ligação. A função lê na mensagem a partir de um gatilho HTTP e a coloca na fila RabbitMQ.

Aqui estão os dados de ligação no ficheiro function.json :

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

Aqui está o código JavaScript:

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

O exemplo a seguir mostra uma ligação de saída RabbitMQ num ficheiro function.json e uma função Python que utiliza a ligação. A função lê na mensagem a partir de um gatilho HTTP e a coloca na fila RabbitMQ.

Aqui estão os dados de ligação no ficheiro 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"
        }
    ]
}

Em _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

As bibliotecas doprocesso isolado C# utilizam o atributo para definir a função. O script C# utiliza, em vez disso, um ficheiro de configuração fun.json.

O construtor do atributo toma os seguintes parâmetros:

Parâmetro Description
Nome da fila Nome da fila a partir da qual receber mensagens.
Nome anfitrião Nome anfitrião da fila, como 10.26.45.210. Ignorado ao utilizar ConnectStringSetting.
Nomeagem de utilizador Nome da definição da aplicação que contém o nome de utilizador para aceder à fila, como UserNameSetting: "%< UserNameFromSettings >%". Ignorado ao utilizar ConnectStringSetting.
Passwordsetting Nome da definição da aplicação que contém a palavra-passe para aceder à fila, tal como PasswordSetting: "%< PasswordFromSettings >%". Ignorado ao utilizar ConnectStringSetting.
ConexãoStringSetting O nome da definição da aplicação que contém a cadeia de ligação da fila da mensagem RabbitMQ. O gatilho não funcionará quando especificar diretamente a cadeia de ligação através de uma definição de aplicação. Por exemplo, quando tiver definido ConnectionStringSetting: "rabbitMQConnection", em seguida, tanto no local.settings.json como na sua aplicação de função, precisa de uma definição como "RabbitMQConnection" : "< ActualConnectionstring >".
Porta Recebe ou define a porta usada. Predefinição a 0, o que aponta para a definição padrão da porta do cliente RabbitMQ de 5672.

Nas bibliotecas da classe C, utilize o RabbitMQAttribute.

Aqui está um RabbitMQTrigger atributo numa assinatura de método para uma biblioteca em processo:

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

Anotações

A RabbitMQOutput anotação permite-lhe criar uma função que funciona quando uma mensagem RabbitMQ é criada.

A anotação suporta as seguintes definições de configuração:

Definições Descrição
nome de fila Nome da fila a partir da qual receber mensagens.
nome hospedeiro Nome anfitrião da fila, como 10.26.45.210. Ignorado ao utilizar ConnectStringSetting.
nomeamento de utilizadorNameSetting Nome da definição da aplicação que contém o nome de utilizador para aceder à fila, como UserNameSetting: "%< UserNameFromSettings >%". Ignorado ao utilizar ConnectStringSetting.
passwordSetting Nome da definição da aplicação que contém a palavra-passe para aceder à fila, tal como PasswordSetting: "%< PasswordFromSettings >%". Ignorado ao utilizar ConnectStringSetting.
conexãoStringSetting O nome da definição da aplicação que contém a cadeia de ligação da fila da mensagem RabbitMQ. O gatilho não funcionará quando especificar diretamente a cadeia de ligação através de uma definição de aplicação. Por exemplo, quando tiver definido ConnectionStringSetting: "rabbitMQConnection", em seguida, tanto no local.settings.json como na sua aplicação de função, precisa de uma definição como "RabbitMQConnection" : "< ActualConnectionstring >".
porta Recebe ou define a porta usada. Predefinição a 0, o que aponta para a definição padrão da porta do cliente RabbitMQ de 5672.

Consulte o exemplo de ligação de saída para obter mais detalhes.

Configuração

A tabela seguinte explica as propriedades de configuração de encadernação que definiu no ficheiro function.json .

function.json propriedade Description
tipo Deve ser definido para RabbitMQ.
direção Deve ser definido para out.
nome O nome da variável que representa a fila no código de função.
nome de fila Nome da fila para enviar mensagens.
nome hospedeiro Nome anfitrião da fila, como 10.26.45.210. Ignorado ao utilizar connectStringSetting.
nome do utilizador Nome da definição da aplicação que contém o nome de utilizador para aceder à fila, como UserNameSetting: "< UserNameFromSettings >". Ignorado ao utilizar connectStringSetting.
palavra-passe Nome da definição da aplicação que contém a palavra-passe para aceder à fila, como UserNameSetting: "< UserNameFromSettings >". Ignorado ao utilizar connectStringSetting.
conexãoStringSetting O nome da definição da aplicação que contém a cadeia de ligação da fila da mensagem RabbitMQ. O gatilho não funcionará quando especificar diretamente a cadeia de ligação em vez de através de uma definição de aplicação em local.settings.json. Por exemplo, quando tiver definido connectionStringSetting: "rabbitMQConnection" em ambos os locais.settings.json e na sua aplicação de função, precisa de uma definição como "rabbitMQConnection" : "< ActualConnectionstring >".
porta Recebe ou define o Porto usado. Predefinição a 0, o que aponta para a definição padrão da porta do cliente RabbitMQ de 5672.

Quando estiver a desenvolver localmente, adicione as definições de aplicação no ficheiro local.settings.json na Values coleção.

Consulte a secção Exemplo para obter exemplos completos.

Utilização

O tipo de parâmetro suportado pelo gatilho RabbitMQ depende da versão de tempo de execução de Funções, da versão do pacote de extensão e da modalidade C# utilizada.

Utilize os seguintes tipos de parâmetros para a ligação de saída:

  • byte[] - Se o valor do parâmetro for nulo quando a função sai, as funções não criam uma mensagem.
  • string - Se o valor do parâmetro for nulo quando a função sai, as funções não criam uma mensagem.
  • POCO - A mensagem é formatada como um objeto C#.

Ao trabalhar com funções C#:

  • As funções assínc precisam de um valor de retorno ou IAsyncCollector em vez de um out parâmetro.

Para um exemplo completo, consulte o exemplo C#.

Utilize os seguintes tipos de parâmetros para a ligação de saída:

  • byte[] - Se o valor do parâmetro for nulo quando a função sai, as funções não criam uma mensagem.
  • string - Se o valor do parâmetro for nulo quando a função sai, as funções não criam uma mensagem.
  • POJO - Se o valor do parâmetro não for formatado como objeto Java, será recebido um erro.

A mensagem de fila está disponível através do context.bindings.<NAME> local onde <NAME> corresponde ao nome definido em função.json. Se a carga útil for JSON, o valor é deseralizado num objeto.

Consulte o exemplo Python.

Passos seguintes