Associazioni di Archiviazione code di Azure per Funzioni di AzureAzure Queue storage bindings for Azure Functions

Questo articolo illustra come operare con le associazioni dell'archiviazione code di Azure in Funzioni di Azure.This article explains how to work with Azure Queue storage bindings in Azure Functions. Funzioni di Azure supporta il trigger e le associazioni di output per le code.Azure Functions supports trigger and output bindings for queues.

Informazioni di riferimento per gli sviluppatori delle Funzioni di Azure.This is reference information for Azure Functions developers. Se non si ha familiarità con le Funzioni di Azure, iniziare con le seguenti risorse:If you're new to Azure Functions, start with the following resources:

Pacchetti: Funzioni 1.xPackages - Functions 1.x

Le associazioni di Archiviazione code sono incluse nel pacchetto NuGet Microsoft.Azure.WebJobs versione 2.x.The Queue storage bindings are provided in the Microsoft.Azure.WebJobs NuGet package, version 2.x. Il codice sorgente del pacchetto si trova nel repository GitHub azure-webjobs-sdk.Source code for the package is in the azure-webjobs-sdk GitHub repository.

Il supporto per questa associazione viene fornito automaticamente in tutti gli ambienti di sviluppo.Support for this binding is automatically provided in all development environments. Non è necessario installare il pacchetto o registrare l'estensione manualmente.You don't have to manually install the package or register the extension.

Pacchetti: Funzioni 2.xPackages - Functions 2.x

Le associazioni di Archiviazione code sono incluse nel pacchetto NuGet Microsoft.Azure.WebJobs versione 3.x.The Queue storage bindings are provided in the Microsoft.Azure.WebJobs NuGet package, version 3.x. Il codice sorgente del pacchetto si trova nel repository GitHub azure-webjobs-sdk.Source code for the package is in the azure-webjobs-sdk GitHub repository.

Il supporto per questa associazione viene fornito automaticamente in tutti gli ambienti di sviluppo.Support for this binding is automatically provided in all development environments. Non è necessario installare il pacchetto o registrare l'estensione manualmente.You don't have to manually install the package or register the extension.

Versione di Azure Storage SDK in Funzioni 1.xAzure Storage SDK version in Functions 1.x

In Funzioni 1.x, i trigger di archiviazione e le associazioni usano la versione 7.2.1 di Azure Storage SDK (pacchetto NuGet WindowsAzure.Storage).In Functions 1.x, the Storage triggers and bindings use version 7.2.1 of the Azure Storage SDK (WindowsAzure.Storage NuGet package). Se si fa riferimento a una versione diversa di Storage SDK e si imposta l'associazione a un tipo di Storage SDK nella firma della funzione, il runtime di Funzioni può segnalare che non è possibile l'associazione a quel tipo.If you reference a different version of the Storage SDK, and you bind to a Storage SDK type in your function signature, the Functions runtime may report that it can't bind to that type. La soluzione consiste nell'assicurarsi che il progetto faccia riferimento a WindowsAzure.Storage 7.2.1.The solution is to make sure your project references WindowsAzure.Storage 7.2.1.

TriggerTrigger

Usare il trigger della coda per avviare una funzione quando viene ricevuto un nuovo elemento in una coda.Use the queue trigger to start a function when a new item is received on a queue. Il messaggio in coda viene fornito come input alla funzione.The queue message is provided as input to the function.

Trigger - esempioTrigger - example

Vedere l'esempio specifico per ciascun linguaggio:See the language-specific example:

Trigger - esempio in C#Trigger - C# example

L'esempio seguente illustra una funzione C# che esegue il polling della coda myqueue-items e scrive un log a ogni elaborazione di un elemento della coda.The following example shows a C# function that polls the myqueue-items queue and writes a log each time a queue item is processed.

public static class QueueFunctions
{
    [FunctionName("QueueTrigger")]
    public static void QueueTrigger(
        [QueueTrigger("myqueue-items")] string myQueueItem, 
        TraceWriter log)
    {
        log.Info($"C# function processed: {myQueueItem}");
    }
}

Trigger - esempio di script C#Trigger - C# script example

L'esempio seguente illustra un'associazione di trigger della coda in un file function.json e il codice script C# (file con estensione csx) che usa l'associazione.The following example shows a queue trigger binding in a function.json file and C# script (.csx) code that uses the binding. La funzione esegue il polling della coda myqueue-items e scrive un log a ogni elaborazione di un elemento della coda.The function polls the myqueue-items queue and writes a log each time a queue item is processed.

Ecco il file function.json:Here's the function.json file:

{
    "disabled": false,
    "bindings": [
        {
            "type": "queueTrigger",
            "direction": "in",
            "name": "myQueueItem",
            "queueName": "myqueue-items",
            "connection":"MyStorageConnectionAppSetting"
        }
    ]
}

Queste proprietà sono descritte nella sezione configuration.The configuration section explains these properties.

Ecco il codice script C#:Here's the C# script code:

#r "Microsoft.WindowsAzure.Storage"

using Microsoft.WindowsAzure.Storage.Queue;
using System;

public static void Run(CloudQueueMessage myQueueItem, 
    DateTimeOffset expirationTime, 
    DateTimeOffset insertionTime, 
    DateTimeOffset nextVisibleTime,
    string queueTrigger,
    string id,
    string popReceipt,
    int dequeueCount,
    TraceWriter log)
{
    log.Info($"C# Queue trigger function processed: {myQueueItem.AsString}\n" +
        $"queueTrigger={queueTrigger}\n" +
        $"expirationTime={expirationTime}\n" +
        $"insertionTime={insertionTime}\n" +
        $"nextVisibleTime={nextVisibleTime}\n" +
        $"id={id}\n" +
        $"popReceipt={popReceipt}\n" + 
        $"dequeueCount={dequeueCount}");
}

Nella sezione usage è illustrato myQueueItem, denominato dalla proprietà name in function.json.The usage section explains myQueueItem, which is named by the name property in function.json. Nella sezione message metadata sono illustrate tutte le altre variabili indicate.The message metadata section explains all of the other variables shown.

Trigger - esempio JavaScriptTrigger - JavaScript example

L'esempio seguente illustra un'associazione di trigger della coda in un file function.json e una funzione JavaScript che usa l'associazione.The following example shows a queue trigger binding in a function.json file and a JavaScript function that uses the binding. La funzione esegue il polling della coda myqueue-items e scrive un log a ogni elaborazione di un elemento della coda.The function polls the myqueue-items queue and writes a log each time a queue item is processed.

Ecco il file function.json:Here's the function.json file:

{
    "disabled": false,
    "bindings": [
        {
            "type": "queueTrigger",
            "direction": "in",
            "name": "myQueueItem",
            "queueName": "myqueue-items",
            "connection":"MyStorageConnectionAppSetting"
        }
    ]
}

Queste proprietà sono descritte nella sezione configuration.The configuration section explains these properties.

Ecco il codice JavaScript:Here's the JavaScript code:

module.exports = function (context) {
    context.log('Node.js queue trigger function processed work item', context.bindings.myQueueItem);
    context.log('queueTrigger =', context.bindingData.queueTrigger);
    context.log('expirationTime =', context.bindingData.expirationTime);
    context.log('insertionTime =', context.bindingData.insertionTime);
    context.log('nextVisibleTime =', context.bindingData.nextVisibleTime);
    context.log('id =', context.bindingData.id);
    context.log('popReceipt =', context.bindingData.popReceipt);
    context.log('dequeueCount =', context.bindingData.dequeueCount);
    context.done();
};

Nella sezione usage è illustrato myQueueItem, denominato dalla proprietà name in function.json.The usage section explains myQueueItem, which is named by the name property in function.json. Nella sezione message metadata sono illustrate tutte le altre variabili indicate.The message metadata section explains all of the other variables shown.

Trigger - attributiTrigger - attributes

Nelle librerie di classi C# usare i seguenti attributi per configurare un trigger di coda:In C# class libraries, use the following attributes to configure a queue trigger:

  • QueueTriggerAttributeQueueTriggerAttribute

    Il costruttore dell'attributo accetta il nome della coda da monitorare, come illustrato nell'esempio seguente:The attribute's constructor takes the name of the queue to monitor, as shown in the following example:

    [FunctionName("QueueTrigger")]
    public static void Run(
        [QueueTrigger("myqueue-items")] string myQueueItem, 
        TraceWriter log)
    {
        ...
    }
    

    È possibile impostare la proprietà Connection per specificare l'account di archiviazione da usare, come illustrato nell'esempio seguente:You can set the Connection property to specify the storage account to use, as shown in the following example:

    [FunctionName("QueueTrigger")]
    public static void Run(
        [QueueTrigger("myqueue-items", Connection = "StorageConnectionAppSetting")] string myQueueItem, 
        TraceWriter log)
    {
        ....
    }
    

    Per un esempio completo, vedere Trigger - esempio in C#.For a complete example, see Trigger - C# example.

  • StorageAccountAttributeStorageAccountAttribute

    Offre un altro modo per specificare l'account di archiviazione da usare.Provides another way to specify the storage account to use. Il costruttore accetta il nome di un'impostazione dell'app che contiene una stringa di connessione di archiviazione.The constructor takes the name of an app setting that contains a storage connection string. L'attributo può essere applicato a livello di parametro, metodo o classe.The attribute can be applied at the parameter, method, or class level. L'esempio seguente illustra il livello classe e il livello metodo:The following example shows class level and method level:

    [StorageAccount("ClassLevelStorageAppSetting")]
    public static class AzureFunctions
    {
        [FunctionName("QueueTrigger")]
        [StorageAccount("FunctionLevelStorageAppSetting")]
        public static void Run( //...
    {
        ...
    }
    

L'account di archiviazione da usare è determinato nell'ordine seguente:The storage account to use is determined in the following order:

  • La proprietà Connection dell'attributo QueueTrigger.The QueueTrigger attribute's Connection property.
  • L'attributo StorageAccount applicato allo stesso parametro dell'attributo QueueTrigger.The StorageAccount attribute applied to the same parameter as the QueueTrigger attribute.
  • L'attributo StorageAccount applicato alla funzione.The StorageAccount attribute applied to the function.
  • L'attributo StorageAccount applicato alla classe.The StorageAccount attribute applied to the class.
  • L'impostazione dell'app "AzureWebJobsStorage".The "AzureWebJobsStorage" app setting.

Trigger - configurazioneTrigger - configuration

Nella tabella seguente sono illustrate le proprietà di configurazione dell'associazione impostate nel file function.json e nell'attributo QueueTrigger.The following table explains the binding configuration properties that you set in the function.json file and the QueueTrigger attribute.

Proprietà di function.jsonfunction.json property Proprietà dell'attributoAttribute property DESCRIZIONEDescription
typetype n/dn/a Il valore deve essere impostato su queueTrigger.Must be set to queueTrigger. Questa proprietà viene impostata automaticamente quando si crea il trigger nel portale di Azure.This property is set automatically when you create the trigger in the Azure portal.
directiondirection n/dn/a Solo nel file function.json.In the function.json file only. Il valore deve essere impostato su in.Must be set to in. Questa proprietà viene impostata automaticamente quando si crea il trigger nel portale di Azure.This property is set automatically when you create the trigger in the Azure portal.
nomename n/dn/a Nome della variabile che rappresenta la coda nel codice della funzione.The name of the variable that represents the queue in function code.
queueNamequeueName QueueNameQueueName Nome della coda sulla quale eseguire il polling.The name of the queue to poll.
connessioneconnection ConnectionConnection Nome di un'impostazione dell'app che contiene la stringa di connessione di archiviazione da usare per questa associazione.The name of an app setting that contains the Storage connection string to use for this binding. Se il nome dell'impostazione dell'app inizia con "AzureWebJobs", è possibile specificare solo il resto del nome.If the app setting name begins with "AzureWebJobs", you can specify only the remainder of the name here. Ad esempio, se si imposta connection su "MyStorage", il runtime di Funzioni di Azure cerca un'impostazione dell'app denominata "AzureWebJobsMyStorage".For example, if you set connection to "MyStorage", the Functions runtime looks for an app setting that is named "AzureWebJobsMyStorage." Se si lascia vuoto connection, il runtime di Funzioni di Azure usa la stringa di connessione di archiviazione predefinita nell'impostazione dell'app denominata AzureWebJobsStorage.If you leave connection empty, the Functions runtime uses the default Storage connection string in the app setting that is named AzureWebJobsStorage.

Quando si sviluppa in locale, le impostazioni dell'app vengono inserite nel file local.settings.json.

Trigger - usoTrigger - usage

In C# e nello script C# è possibile accedere ai dati del messaggio usando un parametro del metodo, ad esempio string paramName.In C# and C# script, access the message data by using a method parameter such as string paramName. Negli script C#, paramName è il valore specificato nella proprietà name di function.json.In C# script, paramName is the value specified in the name property of function.json. È possibile definire associazioni con uno dei seguenti tipi:You can bind to any of the following types:

  • Object: il runtime di Funzioni deserializza un payload JSON in un'istanza di una classe arbitraria definita nel codice.Object - The Functions runtime deserializes a JSON payload into an instance of an arbitrary class defined in your code.
  • string
  • byte[]
  • CloudQueueMessageCloudQueueMessage

Se si prova a eseguire l'associazione a CloudQueueMessage e si riceve un messaggio di errore, assicurarsi di fare riferimento alla versione corretta di Storage SDK.If you try to bind to CloudQueueMessage and get an error message, make sure that you have a reference to the correct Storage SDK version.

In JavaScript, usare context.bindings.<name> per accedere al payload dell'elemento della coda.In JavaScript, use context.bindings.<name> to access the queue item payload. Se il payload è JSON, viene deserializzato in un oggetto.If the payload is JSON, it's deserialized into an object.

Trigger - metadati del messaggioTrigger - message metadata

Il trigger della coda fornisce diverse proprietà di metadati.The queue trigger provides several metadata properties. Queste proprietà possono essere usate come parte delle espressioni di associazione in altre associazioni o come parametri nel codice.These properties can be used as part of binding expressions in other bindings or as parameters in your code. Queste sono le proprietà della classe CloudQueueMessage.These are properties of the CloudQueueMessage class.

ProprietàProperty typeType DESCRIZIONEDescription
QueueTrigger string Payload della coda, se si tratta di una stringa valida.Queue payload (if a valid string). Se il payload della coda di messaggi è una stringa, QueueTrigger ha lo stesso valore della variabile denominata dalla proprietà name in function.json.If the queue message payload as a string, QueueTrigger has the same value as the variable named by the name property in function.json.
DequeueCount int Il numero di volte in cui questo messaggio è stato rimosso dalla coda.The number of times this message has been dequeued.
ExpirationTime DateTimeOffset Ora di scadenza del messaggio.The time that the message expires.
Id string ID del messaggio in coda.Queue message ID.
InsertionTime DateTimeOffset L'ora in cui il messaggio è stato aggiunto alla coda.The time that the message was added to the queue.
NextVisibleTime DateTimeOffset Ora in cui il messaggio sarà visibile.The time that the message will next be visible.
PopReceipt string Ricezione del messaggio.The message's pop receipt.

Trigger - messaggi non elaborabiliTrigger - poison messages

Quando una funzione di trigger della coda ha esito negativo, Funzioni di Azure ritenta l'esecuzione fino a cinque volte per un dato messaggio della coda, incluso il primo tentativo.When a queue trigger function fails, Azure Functions retries the function up to five times for a given queue message, including the first try. Se tutti i cinque tentativi hanno esito negativo, il runtime di Funzioni aggiunge un messaggio a una coda denominata <originalqueuename>-poison.If all five attempts fail, the functions runtime adds a message to a queue named <originalqueuename>-poison. È possibile scrivere una funzione per elaborare i messaggi dalla coda non elaborabile archiviandoli o inviando una notifica della necessità di un intervento manuale.You can write a function to process messages from the poison queue by logging them or sending a notification that manual attention is needed.

Per gestire manualmente i messaggi non elaborabili, controllare dequeueCount nel messaggio della coda.To handle poison messages manually, check the dequeueCount of the queue message.

Trigger - algoritmo di pollingTrigger - polling algorithm

Il trigger della coda implementa un algoritmo di backoff esponenziale casuale per ridurre l'effetto del polling delle code inattive sui costi delle transazioni di archiviazione.The queue trigger implements a random exponential back-off algorithm to reduce the effect of idle-queue polling on storage transaction costs. Quando viene trovato un messaggio, il runtime attende due secondi e quindi controlla la presenza di un altro messaggio. Quando non viene trovato alcun messaggio, rimane in attesa per circa quattro secondi prima di riprovare.When a message is found, the runtime waits two seconds and then checks for another message; when no message is found, it waits about four seconds before trying again. Dopo alcuni tentativi non riusciti per ottenere un messaggio nella coda, il tempo di attesa continua ad aumentare finché non raggiunge il tempo massimo di attesa, che per impostazione predefinita è di un minuto.After subsequent failed attempts to get a queue message, the wait time continues to increase until it reaches the maximum wait time, which defaults to one minute. Il tempo di attesa massimo può essere configurato tramite la proprietà maxPollingInterval nel file host.json.The maximum wait time is configurable via the maxPollingInterval property in the host.json file.

Trigger - concorrenzaTrigger - concurrency

Quando sono in attesa più messaggi della coda, il trigger della coda recupera un batch di messaggi e richiama le istanze della funzione in modo simultaneo per l'elaborazione.When there are multiple queue messages waiting, the queue trigger retrieves a batch of messages and invokes function instances concurrently to process them. Per impostazione predefinita, la dimensione del batch è pari a 16.By default, the batch size is 16. Quando il numero elaborato scende a 8, il runtime ottiene un altro batch e inizia l'elaborazione dei messaggi.When the number being processed gets down to 8, the runtime gets another batch and starts processing those messages. Di conseguenza, il numero massimo di messaggi simultanei elaborati per ogni funzione in una singola macchina virtuale è pari a 24.So the maximum number of concurrent messages being processed per function on one virtual machine (VM) is 24. Questo limite si applica separatamente a ogni funzione attivata dalla coda in ogni macchina virtuale.This limit applies separately to each queue-triggered function on each VM. Se il numero di istanze dell'app per le funzioni aumenta includendo più macchine virtuali, ogni macchina virtuale attenderà i trigger e proverà a eseguire le funzioni.If your function app scales out to multiple VMs, each VM will wait for triggers and attempt to run functions. Se ad esempio il numero di istanze di un'app per le funzioni aumento includendo 3 macchine virtuali, il numero massimo predefinito di istanze simultanee di una funzione attivata dalla coda è pari a 72.For example, if a function app scales out to 3 VMs, the default maximum number of concurrent instances of one queue-triggered function is 72.

La dimensione del batch e la soglia ottenere un nuovo batch possono essere configurate nel file host.json.The batch size and the threshold for getting a new batch are configurable in the host.json file. Se si desidera ridurre al minimo l'esecuzione parallela per le funzioni attivate dalla coda in un'app per le funzioni, è possibile impostare la dimensione del batch su 1.If you want to minimize parallel execution for queue-triggered functions in a function app, you can set the batch size to 1. Questa impostazione elimina la concorrenza solo fino a quando l'app per le funzioni viene eseguita in una singola macchina virtuale.This setting eliminates concurrency only so long as your function app runs on a single virtual machine (VM).

Il trigger della coda impedisce automaticamente a una funzione di elaborare un messaggio della coda più volte. Le funzioni non devono essere scritte per essere idempotenti.The queue trigger automatically prevents a function from processing a queue message multiple times; functions do not have to be written to be idempotent.

Trigger - proprietà di host.jsonTrigger - host.json properties

Il file host.json contiene le impostazioni che controllano il comportamento del trigger della coda.The host.json file contains settings that control queue trigger behavior.

{
    "queues": {
      "maxPollingInterval": 2000,
      "visibilityTimeout" : "00:00:30",
      "batchSize": 16,
      "maxDequeueCount": 5,
      "newBatchThreshold": 8
    }
}
ProprietàProperty PredefinitoDefault DESCRIZIONEDescription
maxPollingIntervalmaxPollingInterval 6000060000 L'intervallo massimo, in millisecondi, tra i polling di coda.The maximum interval in milliseconds between queue polls.
visibilityTimeoutvisibilityTimeout 00 L'intervallo di tempo tra i tentativi se l'elaborazione di un messaggio ha esito negativo.The time interval between retries when processing of a message fails.
batchSizebatchSize 1616 Il numero di messaggi in coda che il runtime di Funzioni recupera simultaneamente e di processi in parallelo.The number of queue messages that the Functions runtime retrieves simultaneously and processes in parallel. Quando il numero elaborato viene ridotto a newBatchThreshold, il runtime ottiene un altro batch e inizia l'elaborazione dei messaggi.When the number being processed gets down to the newBatchThreshold, the runtime gets another batch and starts processing those messages. Di conseguenza, il numero massimo di messaggi simultanei elaborati per ogni funzione è batchSize più newBatchThreshold.So the maximum number of concurrent messages being processed per function is batchSize plus newBatchThreshold. Questo limite si applica separatamente a ogni funzione attivata dalla coda.This limit applies separately to each queue-triggered function.

Se si vuole evitare l'esecuzione in parallelo per i messaggi ricevuti su una coda, è possibile impostare batchSize su 1.If you want to avoid parallel execution for messages received on one queue, you can set batchSize to 1. Tuttavia, questa impostazione elimina solo la concorrenza se l'app per le funzioni viene eseguita su una singola macchina virtuale (VM).However, this setting eliminates concurrency only so long as your function app runs on a single virtual machine (VM). Se l'app per le funzioni scala orizzontalmente più macchine virtuali, ogni macchina virtuale potrebbe eseguire un'istanza di ogni funzione attivata dalla coda.If the function app scales out to multiple VMs, each VM could run one instance of each queue-triggered function.

Il valore massimo per batchSize è 32.The maximum batchSize is 32.
maxDequeueCountmaxDequeueCount 55 Il numero di volte per provare l'elaborazione di un messaggio prima di essere spostato nella coda non elaborabile.The number of times to try processing a message before moving it to the poison queue.
newBatchThresholdnewBatchThreshold batchSize/2batchSize/2 Ogni volta che il numero di messaggi elaborati simultaneamente viene ridotto a questo numero, il runtime recupera un altro batch.Whenever the number of messages being processed concurrently gets down to this number, the runtime retrieves another batch.

OutputOutput

Usare l'associazione di output dell'archiviazione code di Azure per scrivere i messaggi in una coda.Use the Azure Queue storage output binding to write messages to a queue.

Output - esempioOutput - example

Vedere l'esempio specifico per ciascun linguaggio:See the language-specific example:

Output - esempio in C#Output - C# example

L'esempio seguente illustra una funzione C# che crea un messaggio nella coda per ogni richiesta HTTP ricevuta.The following example shows a C# function that creates a queue message for each HTTP request received.

[StorageAccount("AzureWebJobsStorage")]
public static class QueueFunctions
{
    [FunctionName("QueueOutput")]
    [return: Queue("myqueue-items")]
    public static string QueueOutput([HttpTrigger] dynamic input,  TraceWriter log)
    {
        log.Info($"C# function processed: {input.Text}");
        return input.Text;
    }
}

Output - esempio di script C#Output - C# script example

L'esempio seguente illustra un'associazione di trigger HTTP in un file function.json e il codice script C# (file con estensione csx) che usa l'associazione.The following example shows an HTTP trigger binding in a function.json file and C# script (.csx) code that uses the binding. La funzione crea un elemento della coda con un payload dell'oggetto CustomQueueMessage per ogni richiesta HTTP ricevuta.The function creates a queue item with a CustomQueueMessage object payload for each HTTP request received.

Ecco il file function.json:Here's the function.json file:

{
  "bindings": [
    {
      "type": "httpTrigger",
      "direction": "in",
      "authLevel": "function",
      "name": "input"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "return"
    },
    {
      "type": "queue",
      "direction": "out",
      "name": "$return",
      "queueName": "outqueue",
      "connection": "MyStorageConnectionAppSetting",
    }
  ]
}

Queste proprietà sono descritte nella sezione configuration.The configuration section explains these properties.

Ecco il codice script C# che crea un singolo messaggio nella coda:Here's C# script code that creates a single queue message:

public class CustomQueueMessage
{
    public string PersonName { get; set; }
    public string Title { get; set; }
}

public static CustomQueueMessage Run(CustomQueueMessage input, TraceWriter log)
{
    return input;
}

È possibile inviare più messaggi contemporaneamente usando ICollector o il parametro IAsyncCollector.You can send multiple messages at once by using an ICollector or IAsyncCollector parameter. Ecco il codice script C# che invia più messaggi, uno con i dati della richiesta HTTP e uno con i valori hardcoded:Here's C# script code that sends multiple messages, one with the HTTP request data and one with hard-coded values:

public static void Run(
    CustomQueueMessage input, 
    ICollector<CustomQueueMessage> myQueueItems, 
    TraceWriter log)
{
    myQueueItems.Add(input);
    myQueueItems.Add(new CustomQueueMessage { PersonName = "You", Title = "None" });
}

Output - esempio JavaScriptOutput - JavaScript example

L'esempio seguente illustra un'associazione di trigger HTTP in un file function.json e una funzione JavaScript che usa l'associazione.The following example shows an HTTP trigger binding in a function.json file and a JavaScript function that uses the binding. La funzione crea un elemento della coda per ogni richiesta HTTP ricevuta.The function creates a queue item for each HTTP request received.

Ecco il file function.json:Here's the function.json file:

{
  "bindings": [
    {
      "type": "httpTrigger",
      "direction": "in",
      "authLevel": "function",
      "name": "input"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "return"
    },
    {
      "type": "queue",
      "direction": "out",
      "name": "$return",
      "queueName": "outqueue",
      "connection": "MyStorageConnectionAppSetting",
    }
  ]
}

Queste proprietà sono descritte nella sezione configuration.The configuration section explains these properties.

Ecco il codice JavaScript:Here's the JavaScript code:

module.exports = function (context, input) {
    context.done(null, input.body);
};

È possibile inviare più messaggi contemporaneamente definendo un array di messaggio per l'associazione di output myQueueItem.You can send multiple messages at once by defining a message array for the myQueueItem output binding. Il codice JavaScript seguente invia due messaggi della coda con valori hardcoded per ogni richiesta HTTP ricevuta.The following JavaScript code sends two queue messages with hard-coded values for each HTTP request received.

module.exports = function(context) {
    context.bindings.myQueueItem = ["message 1","message 2"];
    context.done();
};

Output - attributiOutput - attributes

Nelle librerie di classi C# usare QueueAttribute.In C# class libraries, use the QueueAttribute.

L'attributo si applica a un parametro out o al valore restituito della funzione.The attribute applies to an out parameter or the return value of the function. Il costruttore dell'attributo accetta il nome della coda, come illustrato nell'esempio seguente:The attribute's constructor takes the name of the queue, as shown in the following example:

[FunctionName("QueueOutput")]
[return: Queue("myqueue-items")]
public static string Run([HttpTrigger] dynamic input,  TraceWriter log)
{
    ...
}

È possibile impostare la proprietà Connection per specificare l'account di archiviazione da usare, come illustrato nell'esempio seguente:You can set the Connection property to specify the storage account to use, as shown in the following example:

[FunctionName("QueueOutput")]
[return: Queue("myqueue-items", Connection = "StorageConnectionAppSetting")]
public static string Run([HttpTrigger] dynamic input,  TraceWriter log)
{
    ...
}

Per un esempio completo, vedere Output - esempio in C#.For a complete example, see Output - C# example.

È possibile usare l'attributo StorageAccount per specificare l'account di archiviazione a livello di classe, metodo o parametro.You can use the StorageAccount attribute to specify the storage account at class, method, or parameter level. Per altre informazioni, vedere Trigger - attributi.For more information, see Trigger - attributes.

Output - configurazioneOutput - configuration

Nella tabella seguente sono illustrate le proprietà di configurazione dell'associazione impostate nel file function.json e nell'attributo Queue.The following table explains the binding configuration properties that you set in the function.json file and the Queue attribute.

Proprietà di function.jsonfunction.json property Proprietà dell'attributoAttribute property DESCRIZIONEDescription
typetype n/dn/a Il valore deve essere impostato su queue.Must be set to queue. Questa proprietà viene impostata automaticamente quando si crea il trigger nel portale di Azure.This property is set automatically when you create the trigger in the Azure portal.
directiondirection n/dn/a Il valore deve essere impostato su out.Must be set to out. Questa proprietà viene impostata automaticamente quando si crea il trigger nel portale di Azure.This property is set automatically when you create the trigger in the Azure portal.
nomename n/dn/a Nome della variabile che rappresenta la coda nel codice della funzione.The name of the variable that represents the queue in function code. Impostare su $return per fare riferimento al valore restituito della funzione.Set to $return to reference the function return value.
queueNamequeueName QueueNameQueueName Nome della coda.The name of the queue.
connessioneconnection ConnectionConnection Nome di un'impostazione dell'app che contiene la stringa di connessione di archiviazione da usare per questa associazione.The name of an app setting that contains the Storage connection string to use for this binding. Se il nome dell'impostazione dell'app inizia con "AzureWebJobs", è possibile specificare solo il resto del nome.If the app setting name begins with "AzureWebJobs", you can specify only the remainder of the name here. Ad esempio, se si imposta connection su "MyStorage", il runtime di Funzioni di Azure cerca un'impostazione dell'app denominata "AzureWebJobsMyStorage".For example, if you set connection to "MyStorage", the Functions runtime looks for an app setting that is named "AzureWebJobsMyStorage." Se si lascia vuoto connection, il runtime di Funzioni di Azure usa la stringa di connessione di archiviazione predefinita nell'impostazione dell'app denominata AzureWebJobsStorage.If you leave connection empty, the Functions runtime uses the default Storage connection string in the app setting that is named AzureWebJobsStorage.

Quando si sviluppa in locale, le impostazioni dell'app vengono inserite nel file local.settings.json.

Output - usoOutput - usage

In C# e negli script C# scrivere un singolo messaggio nella coda tramite un parametro di metodo, ad esempio out T paramName.In C# and C# script, write a single queue message by using a method parameter such as out T paramName. Negli script C#, paramName è il valore specificato nella proprietà name di function.json.In C# script, paramName is the value specified in the name property of function.json. È possibile usare il tipo restituito del metodo anziché un parametro out e T può essere uno dei seguenti tipi:You can use the method return type instead of an out parameter, and T can be any of the following types:

Se si prova a eseguire l'associazione a CloudQueueMessage e si riceve un messaggio di errore, assicurarsi di fare riferimento alla versione corretta di Storage SDK.If you try to bind to CloudQueueMessage and get an error message, make sure that you have a reference to the correct Storage SDK version.

In C# e negli script C# scrivere più messaggi nella coda usando uno dei seguenti tipi:In C# and C# script, write multiple queue messages by using one of the following types:

Nelle funzioni JavaScript usare context.bindings.<name> per accedere al messaggio nella coda di output.In JavaScript functions, use context.bindings.<name> to access the output queue message. È possibile usare una stringa o un oggetto serializzabile in JSON per il payload dell'elemento della coda.You can use a string or a JSON-serializable object for the queue item payload.

Eccezioni e codici restituitiExceptions and return codes

AssociazioneBinding RiferimentiReference
CodaQueue Codici di errore della codaQueue Error Codes
Blob, Table, QueueBlob, Table, Queue Codici di errore di archiviazioneStorage Error Codes
Blob, Table, QueueBlob, Table, Queue Risoluzione dei problemiTroubleshooting

Passaggi successiviNext steps