Привязки выходных данных хранилища очередей Azure для Функций Azure

Функции Azure могут создавать новые сообщения хранилища очередей Azure, настроив привязку для вывода.

Сведения об установке и настройке см. в обзорной статье.

Внимание

В этой статье используются вкладки для поддержки нескольких версий модели программирования Node.js. Модель версии 4 общедоступна и предназначена для более гибкого и интуитивно понятного интерфейса для разработчиков JavaScript и TypeScript. Дополнительные сведения о том, как работает модель версии 4, см. в руководстве разработчика по Функции Azure Node.js. Дополнительные сведения о различиях между версиями 3 и 4 см. в руководстве по миграции.

Функции Azure поддерживает две модели программирования для Python. Способ определения привязок зависит от выбранной модели программирования.

Модель программирования Python версии 2 позволяет определять привязки с помощью декораторов непосредственно в коде функции Python. Дополнительные сведения см. в руководстве разработчика Python.

Эта статья поддерживает обе модели программирования.

Пример

Поддержка Go для этого привязки сейчас недоступна.

Функцию C# можно создать с помощью одного из следующих режимов C#:

  • Изолированная рабочая модель: скомпилированная функция C#, которая выполняется в рабочем процессе, изолированном от среды выполнения. Изолированный рабочий процесс необходим для поддержки функций C#, работающих в LTS и не LTS-версиях .NET и платформа .NET Framework. Расширения для изолированных рабочих процессов используют Microsoft.Azure.Functions.Worker.Extensions.* пространства имен.
  • Модель внутрипроцессного процесса: скомпилированная функция C#, которая выполняется в том же процессе, что и среда выполнения Функций. В варианте этой модели функции можно запускать с помощью скриптов C#, которая поддерживается главным образом для редактирования портала C#. Расширения для функций в процессе используют Microsoft.Azure.WebJobs.Extensions.* пространства имен.
[Function(nameof(QueueInputOutputFunction))]
[QueueOutput("output-queue")]
public string[] QueueInputOutputFunction([QueueTrigger("input-queue")] Album myQueueItem, FunctionContext context)
{
    // Use a string array to return more than one message.
    string[] messages = {
        $"Album name = {myQueueItem.Name}",
        $"Album songs = {myQueueItem.Songs}"};

    _logger.LogInformation("{msg1},{msg2}", messages[0], messages[1]);

    // Queue Output messages
    return messages;
}

Полный пример настройки выходной привязки к хранилищу очередей см. в одной из следующих статей:

В следующем примере показана функция Java, которая создает сообщение очереди, если оно активировано HTTP-запросом.

@FunctionName("httpToQueue")
@QueueOutput(name = "item", queueName = "myqueue-items", connection = "MyStorageConnectionAppSetting")
 public String pushToQueue(
     @HttpTrigger(name = "request", methods = {HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS)
     final String message,
     @HttpOutput(name = "response") final OutputBinding<String> result) {
       result.setValue(message + " has been added.");
       return message;
 }

В библиотеке среды выполнения функций Java используйте заметку @QueueOutput для параметров, значения которых будут записываться в хранилище очередей. Параметр должен иметь тип OutputBinding<T>, где T — любой собственный тип Java POJO.

Полный пример настройки выходной привязки к хранилищу очередей см. в одной из следующих статей:

В следующем примере показана функция TypeScript с триггером HTTP, которая создает элемент очереди для каждого полученного HTTP-запроса.

import { app, HttpRequest, HttpResponseInit, InvocationContext, output } from '@azure/functions';

const queueOutput = output.storageQueue({
    queueName: 'outqueue',
    connection: 'MyStorageConnectionAppSetting',
});

export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    const body = await request.text();
    context.extraOutputs.set(queueOutput, body);
    return { body: 'Created queue item.' };
}

app.http('httpTrigger1', {
    methods: ['GET', 'POST'],
    authLevel: 'anonymous',
    extraOutputs: [queueOutput],
    handler: httpTrigger1,
});

Чтобы вывести несколько сообщений, верните массив вместо одного объекта. Например:

context.extraOutputs.set(queueOutput, ['message 1', 'message 2']);

В следующем примере показана функция JavaScript с триггером HTTP, которая создает элемент очереди для каждого полученного HTTP-запроса.

const { app, output } = require('@azure/functions');

const queueOutput = output.storageQueue({
    queueName: 'outqueue',
    connection: 'MyStorageConnectionAppSetting',
});

app.http('httpTrigger1', {
    methods: ['GET', 'POST'],
    authLevel: 'anonymous',
    extraOutputs: [queueOutput],
    handler: async (request, context) => {
        const body = await request.text();
        context.extraOutputs.set(queueOutput, body);
        return { body: 'Created queue item.' };
    },
});

Чтобы вывести несколько сообщений, верните массив вместо одного объекта. Например:

context.extraOutputs.set(queueOutput, ['message 1', 'message 2']);

Полный пример настройки выходной привязки к хранилищу очередей см. в одной из следующих статей:

В следующих примерах кода показано, как вывести сообщение очереди из функции, активируемой HTTP. Раздел конфигурации с параметром type класса queue определяет привязку для вывода.

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "Request",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "Response"
    },
    {
      "type": "queue",
      "direction": "out",
      "name": "Msg",
      "queueName": "outqueue",
      "connection": "MyStorageConnectionAppSetting"
    }
  ]
}

С помощью этой конфигурации привязки функция PowerShell может создать сообщение очереди с помощью Push-OutputBinding. В этом примере сообщение создается на основе строки запроса или параметра Body.

using namespace System.Net

# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)

# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."

# Interact with query parameters or the body of the request.
$message = $Request.Query.Message
Push-OutputBinding -Name Msg -Value $message
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
    StatusCode = 200
    Body = "OK"
})

Чтобы отправить несколько сообщений одновременно, определите массив сообщений и используйте Push-OutputBinding для отправки сообщений в привязку для вывода очереди.

using namespace System.Net

# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)

# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."

# Interact with query parameters or the body of the request.
$message = @("message1", "message2")
Push-OutputBinding -Name Msg -Value $message
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
    StatusCode = 200
    Body = "OK"
})

Полный пример настройки выходной привязки к хранилищу очередей см. в одной из следующих статей:

В следующем примере показано, как вывести одно или несколько значений в очередях хранилища. Настройка для function.json в любом случае одна и та же. Пример зависит от того, используется ли модель программирования Python версии 1 или версии 2.

import logging
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="QueueOutput1")
@app.route(route="message")
@app.queue_output(arg_name="msg", 
                  queue_name="<QUEUE_NAME>", 
                  connection="<CONNECTION_SETTING>")
def main(req: func.HttpRequest, msg: func.Out[str]) -> func.HttpResponse:
    input_msg = req.params.get('name')
    logging.info(input_msg)

    msg.set(input_msg)

    logging.info(f'name: {name}')
    return 'OK'

Полный пример настройки выходной привязки к хранилищу очередей см. в одной из следующих статей:

Атрибуты

Атрибут, определяющий выходную привязку в библиотеках C#, зависит от режима, в котором выполняется библиотека классов C#.

При выполнении в изолированном рабочем процессе используется QueueOutputAttribute, который принимает имя очереди, как показано в следующем примере:

[Function(nameof(QueueInputOutputFunction))]
[QueueOutput("output-queue")]
public string[] QueueInputOutputFunction([QueueTrigger("input-queue")] Album myQueueItem, FunctionContext context)

При выполнении изолированного рабочего процесса поддерживаются только возвращаемые переменные. Выходные параметры нельзя использовать.

Декораторы

Применяется только к модели программирования Python версии 2.

Для функций Python версии 2, определенных с помощью декоратора, в следующих свойствах queue_output:

Свойство Описание
arg_name Имя переменной, представляющей очередь в коде функции.
queue_name Имя очереди.
connection Имя параметра или коллекции параметров приложения, указывающих, как подключиться к очередям Azure. См. раздел Подключения.

Сведения о функциях Python, определенных с помощью function.json, см. в разделе "Конфигурация ".

Заметки

Заметка QueueOutput позволяет написать сообщение как выходной параметр функции. В следующем примере показана функция, активируемая HTTP, которая создает сообщение очереди.

package com.function;
import java.util.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.*;

public class HttpTriggerQueueOutput {
    @FunctionName("HttpTriggerQueueOutput")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.FUNCTION) HttpRequestMessage<Optional<String>> request,
            @QueueOutput(name = "message", queueName = "messages", connection = "MyStorageConnectionAppSetting") OutputBinding<String> message,
            final ExecutionContext context) {

        message.setValue(request.getQueryParameters().get("name"));
        return request.createResponseBuilder(HttpStatus.OK).body("Done").build();
    }
}
Свойство Описание
name Объявляет имя параметра в сигнатуре функции. При активации функции значение этого параметра будет иметь содержимое сообщения очереди.
queueName Объявляет имя очереди в учетной записи хранения.
connection Задает строку подключения к учетной записи хранения.

Параметр, связанный с заметкой QueueOutput, типизирован как экземпляр OutputBinding<T>.

Настройка

Применяется только к модели программирования Python версии 1.

В следующей таблице описываются свойства, которые можно задать для options объекта, переданного методу output.storageQueue() .

Свойство Описание
queueName Имя очереди.
Подключение Имя параметра или коллекции параметров приложения, указывающих, как подключиться к очередям Azure. См. раздел Подключения.

Если разработка ведется на локальном компьютере, добавьте параметры приложения в файл local.settings.json в коллекции Values.

В следующей таблице описываются свойства конфигурации привязки, которые задаются в файле function.json.

Свойство в function.json Описание
тип Должен иметь значениеqueue. Это свойство задается автоматически при создании триггера на портале Azure.
направление Должен иметь значениеout. Это свойство задается автоматически при создании триггера на портале Azure.
имя Имя переменной, представляющей очередь в коде функции. Задайте значение $return, ссылающееся на возвращаемое значение функции.
queueName Имя очереди.
Подключение Имя параметра или коллекции параметров приложения, указывающих, как подключиться к очередям Azure. См. раздел Подключения.

Если разработка ведется на локальном компьютере, добавьте параметры приложения в файл local.settings.json в коллекции Values.

Подробные примеры см. в разделе Примеры.

Использование

Использование выходной привязки очереди зависит от версии пакета расширения и модальности C#, используемой в приложении-функции, которая может представлять один из следующих вариантов:

Изолированная библиотека классов рабочих процессов, скомпилированная функция C# выполняется в процессе, изолированном от среды выполнения.

Выберите версию, чтобы просмотреть сведения об использовании для режима и версии.

Если требуется, чтобы функция записывала одно сообщение, выходная привязка очереди может привязаться к следующим типам:

Тип Описание
string Содержимое сообщения в виде строки. Используется, когда сообщение является простым текстом.
byte[] Байт сообщения.
Сериализуемые в JSON типы Объект, представляющий содержимое сообщения JSON. Функции пытаются сериализовать обычный тип объекта CLR (POCO) в данные JSON.

Если требуется, чтобы функция записывала несколько сообщений, выходная привязка очереди может привязаться к следующим типам:

Тип Описание
T[] где T является одним из типов одного сообщения Массив, содержащий содержимое для нескольких сообщений. Каждая запись представляет одно сообщение.

Для других сценариев вывода создайте и используйте QueueClient с другими типами из Azure.Storage.Queues напрямую. Пример использования внедрения зависимостей для создания типа клиента из пакета SDK Azure см. в статье "Регистрация клиентов Azure".

Существует два варианта для записи в очередь из функции с помощью заметки QueueOutput.

  • Возвращаемое значение. В результате применения заметки к самой функции возвращаемое значение функции записывается в очередь.

  • Императив. Чтобы явно задать значение сообщения, примените заметку к конкретному параметру типа OutputBinding<T>, где T находится POJO или любой собственный тип Java. При такой конфигурации при передаче значения в методу setValue значение записывается в очередь.

Доступ к выходному элементу очереди путем возврата значения напрямую или с помощью context.extraOutputs.set(). Строку или сериализуемый объект JSON можно использовать для полезных данных элемента очереди.

Вывод в сообщение очереди доступен через Push-OutputBinding, где вы передаете аргументы, соответствующие имени, заданному параметром привязки name в файле function.json.

Существует два варианта записи из функции в настроенную очередь:

  • свойства в name значение . В этой конфигурации возвращаемое значение функции сохраняется как сообщение очереди.

  • Императив. Передайте значение в метод set параметра, объявленного как тип Out . Значение, передаваемое в set, сохраняется как сообщение хранилища очереди.

Выходной параметр функции должен быть определен как func.Out[func.QueueMessage], func.Out[str]или func.Out[bytes]. Дополнительные сведения см. в примере выходных данных .

Связи

Свойство устанавливается на ключ в настройках приложения, который возвращает значение, используемое connection runtime Functions для подключения к аккаунту хранилища, используемому расширением. Значение настройки свойств соединения зависит от типа соединения:

  • Управляемое соединение идентичности: свойство connection является <CONNECTION_NAME_PREFIX> общим для группы настроек, которые вместе определяют соединение на основе идентичности с аккаунтом хранения. Для получения дополнительной информации см. раздел «Определить идентичные связи».
  • Key Vault reference: connection Настройка свойств возвращает ссылку на Azure Key Vault на место, где централизованно поддерживается строка подключения. Для получения дополнительной информации смотрите раздел Define Key Vault connections.
  • App Configuration reference: connection Настройка свойства возвращает ссылку на Конфигурация приложений Azure, которая возвращает строка подключения или ссылку на Key Vault. Для получения дополнительной информации см. Конфигурация приложений Azure в статье о соединениях.
  • Connection string: Настройка connection свойств возвращает фактическую строка подключения для учетной записи хранилища. Поскольку строка строка подключения содержит общие секретные ключи, следует рассмотреть возможность использования управляемого идентификатора соединения, если это возможно. Для получения дополнительной информации см. раздел «Определить соединения».

Чтобы узнать больше о соединениях связей, см. раздел «Управление соединением в Функции Azure». Чтобы получить строку подключения, выполните действия, описанные в разделе Управление ключами доступа к учетной записи хранения.

Когда вы устанавливаете connection префикс ключа или ключа с именем AzureWebJobsStorage или пустую строку, расширение связывания использует стандартную учетную запись хранения хоста. Для получения дополнительной информации см. раздел «Оптимизировать производительность хранения».

Исключения и коды возврата

Привязка Справочные материалы
Очередь Коды ошибок очередей
Большой двоичный объект, таблица, очередь Коды ошибок хранилища
Большой двоичный объект, таблица, очередь Устранение неполадок

Следующие шаги