Condividi tramite


Panoramica del trigger RabbitMQ per Funzioni di Azure

Nota

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

Usare il trigger RabbitMQ per rispondere ai messaggi da 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 @RabbitMQTrigger dei tipi Java RabbitMQ per descrivere la configurazione per un trigger di coda RabbitMQ. La funzione afferra il messaggio inserito nella coda e lo aggiunge ai log.

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

L'esempio seguente mostra un'associazione di trigger RabbitMQ in un file function.json e una funzione JavaScript che usa l'associazione. La funzione legge e registra un messaggio RabbitMQ.

Ecco i dati di associazione nel file function.json:

{​​
    "bindings": [
        {​​
            "name": "myQueueItem",
            "type": "rabbitMQTrigger",
            "direction": "in",
            "queueName": "queue",
            "connectionStringSetting": "rabbitMQConnectionAppSetting"
        }​​
    ]
}​​

Ecco il codice script JavaScript:

module.exports = async function (context, myQueueItem) {​​
    context.log('JavaScript RabbitMQ trigger function processed work item', myQueueItem);
}​​;

Nell'esempio seguente viene illustrato come leggere un messaggio della coda RabbitMQ tramite un trigger.

Un'associazione RabbitMQ viene definita in function.json dove il tipo è impostato su 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)

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 RabbitMQTrigger consente di creare una funzione che viene eseguita quando viene creato un messaggio RabbitMQ.

L'annotazione supporta le opzioni di configurazione 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 >".
port Ottiene o imposta la porta utilizzata. Il valore predefinito è 0, che punta all'impostazione predefinita della porta del client RabbitMQ di 5672.

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 RabbitMQTrigger.
direction Deve essere impostato su in.
name Nome della variabile che rappresenta la coda nel codice della funzione.
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.

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 modalità C# usata.

Le associazioni RabbitMQ supportano attualmente solo tipi di oggetto stringa e serializzabili durante l'esecuzione in un processo isolato.

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

Fare riferimento alle annotazioni Java.

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.

Code di messaggi non recapitabili

Le code e gli scambi di messaggi non recapitabili non possono essere controllati o configurati dal trigger RabbitMQ. Per usare code di messaggi non recapitabili, preconfigurare la coda usata dal trigger in RabbitMQ. Fare riferimento alla documentazione di RabbitMQ.

impostazioni host.json

Questa sezione descrive le impostazioni di configurazione disponibili per questa associazione nelle versioni 2.x e successive. Le impostazioni nel file host.json si applicano a tutte le funzioni in un'istanza dell'app per le funzioni. L'esempio host.json file seguente contiene solo le impostazioni della versione 2.x+ per questa associazione. Per altre informazioni sulle impostazioni di configurazione delle app per le funzioni nelle versioni 2.x e successive, vedere informazioni di riferimento host.json per Funzioni di Azure.

{
    "version": "2.0",
    "extensions": {
        "rabbitMQ": {
            "prefetchCount": 100,
            "queueName": "queue",
            "connectionString": "amqp://user:password@url:port",
            "port": 10
        }
    }
}
Proprietà Predefinito Descrizione
prefetchCount 30 Ottiene o imposta il numero di messaggi che il destinatario del messaggio può richiedere contemporaneamente e viene memorizzato nella cache.
queueName n/d Nome della coda da cui ricevere i messaggi.
connectionString n/d La coda di messaggi RabbitMQ stringa di connessione. Il stringa di connessione viene specificato direttamente qui e non tramite un'impostazione dell'app.
port 0 (ignorato se si usa connectionString) Ottiene o imposta la porta utilizzata. Il valore predefinito è 0, che punta all'impostazione predefinita della porta del client rabbitmq: 5672.

Test locale

Nota

ConnectionString ha la precedenza su "hostName", "userName" e "password". Se sono tutti impostati, connectionString eseguirà l'override degli altri due.

Se si esegue il test in locale senza un stringa di connessione, è necessario impostare l'impostazione "hostName" e "userName" e "password" se applicabile nella sezione "rabbitMQ" di host.json:

{
    "version": "2.0",
    "extensions": {
        "rabbitMQ": {
            ...
            "hostName": "localhost",
            "username": "userNameSetting",
            "password": "passwordSetting"
        }
    }
}
Proprietà Predefinito Descrizione
hostName n/d (ignorato se si usa connectionString)
Nome host della coda (ad esempio: 10.26.45.210)
userName n/d (ignorato se si usa connectionString)
Nome per accedere alla coda
password n/d (ignorato se si usa connectionString)
Password per accedere alla coda

Abilitare il ridimensionamento del runtime

Per consentire al trigger RabbitMQ di aumentare il numero di istanze, è necessario abilitare l'impostazione Monitoraggio scalabilità di runtime.

Nel portale questa impostazione è disponibile in Impostazioni di runtime della funzione di configurazione>per l'app per le funzioni.

VNETToggle

Nell'interfaccia della riga di comando è possibile abilitare Il monitoraggio della scalabilità di runtime usando il comando seguente:

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

Monitoraggio dell'endpoint RabbitMQ

Per monitorare le code e gli scambi per un determinato endpoint RabbitMQ:

  • Abilitare il plug-in di gestione RabbitMQ
  • Passare a http://{node-hostname}:15672 e accedere con il nome utente e la password.

Passaggi successivi