Condividi tramite


Panoramica dell'associazione di output RabbitMQ per Funzioni di Azure

Nota

Le associazioni RabbitMQ sono completamente supportate solo nei piani Premium e Dedicato . Il consumo non è supportato.

Usare l'associazione di output RabbitMQ per inviare messaggi a una coda RabbitMQ.

Per informazioni sui dettagli di impostazione e configurazione, vedere la panoramica.

Esempio

È possibile creare una funzione C# usando una delle modalità C# seguenti:

  • Modello di lavoro isolato: funzione C# compilata eseguita in un processo di lavoro isolato dal runtime. Il processo di lavoro isolato è necessario per supportare le funzioni C# in esecuzione in LTS e versioni non LTS .NET e .NET Framework.
  • Modello in-process: funzione C# compilata eseguita nello stesso processo del runtime di Funzioni.
  • Script C#: usato principalmente quando si creano funzioni C# nel portale di Azure.
[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 funzione Java seguente usa l'annotazione @RabbitMQOutput dei tipi Java RabbitMQ per descrivere la configurazione per un'associazione di output della coda RabbitMQ. La funzione invia un messaggio alla coda RabbitMQ quando viene attivato da timerTrigger ogni 5 minuti.

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

L'esempio seguente mostra un'associazione di output RabbitMQ in un file function.json e una funzione JavaScript che usa l'associazione. La funzione legge il messaggio da un trigger HTTP e lo restituisce nella coda RabbitMQ.

Ecco i dati di associazione nel file function.json:

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

Ecco il codice JavaScript:

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

L'esempio seguente mostra un'associazione di output RabbitMQ in un file function.json e una funzione Python che usa l'associazione. La funzione legge il messaggio da un trigger HTTP e lo restituisce nella coda RabbitMQ.

Ecco i dati di associazione nel file 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"
        }
    ]
}

In _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'

Attributi

Sia le librerie C# in-process che il processo di lavoro isolato usano l'attributo per definire la funzione. Lo script C# usa invece un file di configurazione function.json.

Il costruttore dell'attributo accetta i parametri seguenti:

Parametro Descrizione
QueueName Nome della coda da cui ricevere messaggi.
HostName Nome host della coda, ad esempio 10.26.45.210. Ignorato quando si usa ConnectStringSetting.
UserNameSetting Nome dell'impostazione dell'app che contiene il nome utente per accedere alla coda, ad esempio UserNameSetting: "%< UserNameFromSettings >%". Ignorato quando si usa ConnectStringSetting.
PasswordSetting Nome dell'impostazione dell'app che contiene la password per accedere alla coda, ad esempio PasswordSetting: "%< PasswordFromSettings >%". Ignorato quando si usa ConnectStringSetting.
ConnectionStringSetting Nome dell'impostazione dell'app che contiene la coda di messaggi RabbitMQ stringa di connessione. Il trigger non funzionerà quando si specifica il stringa di connessione direttamente tramite un'impostazione dell'app. Ad esempio, quando è stato impostato ConnectionStringSetting: "rabbitMQConnection", in entrambi i local.settings.json e nell'app per le funzioni è necessaria un'impostazione come "RabbitMQConnection" : "< ActualConnectionstring >".
Porta Ottiene o imposta la porta utilizzata. Il valore predefinito è 0, che punta all'impostazione predefinita della porta del client RabbitMQ di 5672.

Nelle librerie di classi C# usare l'attributo RabbitMQTrigger .

Ecco un RabbitMQTrigger attributo in una firma del metodo per una libreria di processi di lavoro isolata:

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

Annotazioni

L'annotazione RabbitMQOutput consente di creare una funzione che viene eseguita quando viene creato un messaggio RabbitMQ.

L'annotazione supporta le impostazioni di configurazione seguenti:

Impostazione Descrizione
queueName Nome della coda da cui ricevere messaggi.
hostName Nome host della coda, ad esempio 10.26.45.210. Ignorato quando si usa ConnectStringSetting.
userNameSetting Nome dell'impostazione dell'app che contiene il nome utente per accedere alla coda, ad esempio UserNameSetting: "%< UserNameFromSettings >%". Ignorato quando si usa ConnectStringSetting.
passwordSetting Nome dell'impostazione dell'app che contiene la password per accedere alla coda, ad esempio PasswordSetting: "%< PasswordFromSettings >%". Ignorato quando si usa ConnectStringSetting.
connectionStringSetting Nome dell'impostazione dell'app che contiene la coda di messaggi RabbitMQ stringa di connessione. Il trigger non funzionerà quando si specifica il stringa di connessione direttamente tramite un'impostazione dell'app. Ad esempio, quando è stato impostato ConnectionStringSetting: "rabbitMQConnection", in entrambi i local.settings.json e nell'app per le funzioni è necessaria un'impostazione come "RabbitMQConnection" : "< ActualConnectionstring >".
port Ottiene o imposta la porta utilizzata. Il valore predefinito è 0, che punta all'impostazione predefinita della porta del client RabbitMQ di 5672.

Per altri dettagli, vedere l'esempio di associazione di output.

Impostazione

Nella tabella seguente sono illustrate le proprietà di configurazione dell'associazione impostate nel file function.json.

Proprietà di function.json Descrizione
type Deve essere impostato su RabbitMQ.
direction Deve essere impostato su out.
name Nome della variabile che rappresenta la coda nel codice della funzione.
queueName Nome della coda a cui inviare messaggi.
hostName Nome host della coda, ad esempio 10.26.45.210. Ignorato quando si usa connectStringSetting.
userName Nome dell'impostazione dell'app che contiene il nome utente per accedere alla coda, ad esempio UserNameSetting: "< UserNameFromSettings >". Ignorato quando si usa connectStringSetting.
password Nome dell'impostazione dell'app che contiene la password per accedere alla coda, ad esempio UserNameSetting: "< UserNameFromSettings >". Ignorato quando si usa connectStringSetting.
connectionStringSetting Nome dell'impostazione dell'app che contiene la coda di messaggi RabbitMQ stringa di connessione. Il trigger non funzionerà quando si specifica il stringa di connessione direttamente anziché tramite un'impostazione dell'app in local.settings.json. Ad esempio, quando è stato impostato connectionStringSetting: "rabbitMQConnection" sia nel local.settings.json che nell'app per le funzioni è necessaria un'impostazione come "rabbitMQConnection" : "< ActualConnectionstring >".
port Ottiene o imposta la porta utilizzata. Il valore predefinito è 0, che punta all'impostazione predefinita della porta del client RabbitMQ di 5672.

Quando si sviluppa in locale, aggiungere le impostazioni dell'applicazione nel file local.settings.json nella Values raccolta.

Per esempi completi, vedere la sezione di esempio.

Utilizzo

Il tipo di parametro supportato dal trigger RabbitMQ dipende dalla versione del runtime di Funzioni, dalla versione del pacchetto di estensione e dalla modalità C# usata.

Le associazioni RabbitMQ supportano attualmente solo tipi di oggetto stringa e serializzabili quando vengono eseguiti in un processo di lavoro isolato.

Per un esempio completo, vedere l'esempio in C#.

Usare i tipi di parametro seguenti per l'associazione di output:

  • byte[] - Se il valore del parametro è Null quando la funzione viene chiusa, Funzioni non crea un messaggio.
  • string - Se il valore del parametro è Null quando la funzione viene chiusa, Funzioni non crea un messaggio.
  • POJO - Se il valore del parametro non è formattato come oggetto Java, verrà ricevuto un errore.

Il messaggio della coda è disponibile tramite context.bindings.<NAME> dove <NAME> corrisponde al nome definito in function.json. Se il payload è JSON, il valore viene deserializzato in un oggetto .

Vedere l'esempio python.

Passaggi successivi