Поделиться через


Выходные привязки RabbitMQ для службы "Функции Azure": обзор

Выходные привязки RabbitMQ используются для отправки сообщений в очередь RabbitMQ.

Примечание.

Привязки RabbitMQ полностью поддерживаются только в планах Elastic Premium и Выделенных (Служба приложений). Планы потребления и потребления Flex пока не поддерживаются.

Привязки RabbitMQ не поддерживаются средой выполнения Функции Azure версии 1.x.

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

Пример

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

  • Изолированная рабочая модель: скомпилированная функция C#, которая выполняется в рабочем процессе, изолированном от среды выполнения. Изолированный рабочий процесс необходим для поддержки функций C#, работающих в долгосрочной поддержке (LTS) и версиях, отличных от LTS для .NET и .NET Framework.
  • Модель в процессе: скомпилированная функция C#, которая выполняется в том же процессе, что и среда выполнения Функций Azure.
  • Скрипт C#: используется в основном при создании функций C# в портал 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;
}

Следующая функция Java использует заметку @RabbitMQOutput из типов Java RabbitMQ для описания конфигурации выходной привязки очереди RabbitMQ. Эта функция отправляет сообщение в очередь RabbitMQ при активации TimerTrigger каждые 5 минут.

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

В следующем примере показаны выходная привязка RabbitMQ в файле function.json и функция JavaScript, которая использует эту привязку. Функция считывает сообщение из триггера HTTP и выводит его в очередь RabbitMQ.

Данные привязки в файле function.json:

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

Код JavaScript:

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

В следующем примере показаны выходная привязка RabbitMQ в файле function.json и функция Python, которая ее использует. Функция считывает сообщение из триггера HTTP и выводит его в очередь RabbitMQ.

Данные привязки в файле 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"
        }
    ]
}

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

Атрибуты

Библиотеки C# в процессе и изолированном рабочем процессе используют атрибут для определения функции. Вместо этого в скрипте C# используется файл конфигурации function.json.

Конструктор атрибута принимает следующие параметры:

Параметр Описание
Имя очереди Имя очереди, из которой нужно получать сообщения.
Имя хоста Имя узла очереди, например 10.26.45.210. Игнорируется при использовании ConnectStringSetting.
Настройка имени пользователя Имя параметра приложения, содержащего имя пользователя для доступа к очереди, например UserNameSetting: "%< UserNameFromSettings >%". Игнорируется при использовании ConnectStringSetting.
Настройка пароля Имя параметра приложения, содержащего пароль для доступа к очереди, например PasswordSetting: "%< PasswordFromSettings >%". Игнорируется при использовании ConnectStringSetting.
ConnectionStringSetting Имя параметра приложения, который содержит строку подключения очереди сообщений RabbitMQ. Триггер не будет работать при указании строки подключения напрямую с помощью параметра приложения. Например, если задано ConnectionStringSetting: "rabbitMQConnection", в файле local.settings.json и в приложении-функции вам потребуется параметр, подобный "RabbitMQConnection" : "< ActualConnectionstring >".
порт. Возвращает или задает используемый порт. По умолчанию принимает значение 0, которое указывает на порт клиента RabbitMQ по умолчанию: 5672.

В библиотеках классов C# используйте атрибут RabbitMQTrigger.

Ниже приведен RabbitMQTrigger атрибут в сигнатуре метода для изолированной библиотеки рабочих процессов:

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

Заметки

Заметка RabbitMQOutput позволяет создать функцию, которая выполняется при создании сообщения RabbitMQ.

Эта заметка поддерживает следующие параметры конфигурации:

Параметр Описание
queueName Имя очереди, из которой нужно получать сообщения.
Имя узла Имя узла очереди, например 10.26.45.210. Игнорируется при использовании ConnectStringSetting.
userNameSetting Имя параметра приложения, содержащего имя пользователя для доступа к очереди, например UserNameSetting: "%< UserNameFromSettings >%". Игнорируется при использовании ConnectStringSetting.
Настройка пароля Имя параметра приложения, содержащего пароль для доступа к очереди, например PasswordSetting: "%< PasswordFromSettings >%". Игнорируется при использовании ConnectStringSetting.
connectionStringSetting Имя параметра приложения, который содержит строку подключения очереди сообщений RabbitMQ. Триггер не будет работать при указании строки подключения напрямую с помощью параметра приложения. Например, если задано ConnectionStringSetting: "rabbitMQConnection", в файле local.settings.json и в приложении-функции вам потребуется параметр, подобный "RabbitMQConnection" : "< ActualConnectionstring >".
порт Возвращает или задает используемый порт. По умолчанию принимает значение 0, которое указывает на порт клиента RabbitMQ по умолчанию: 5672.

Более подробные сведения см. в примере выходной привязки.

Настройка

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

Свойство в function.json Описание
тип Должен иметь значениеRabbitMQ.
направление Должен иметь значениеout.
имя Имя переменной, представляющей очередь в коде функции.
queueName Имя очереди, в которую отправляются сообщения.
Имя узла Имя узла очереди, например 10.26.45.210. Игнорируется при использовании connectStringSetting.
userName Имя параметра приложения, содержащего имя пользователя для доступа к очереди, например UserNameSetting: "< UserNameFromSettings >". Игнорируется при использовании connectStringSetting.
пароль Имя параметра приложения, содержащего имя пользователя для доступа к очереди, например UserNameSetting: "< UserNameFromSettings >". Игнорируется при использовании connectStringSetting.
connectionStringSetting Имя параметра приложения, который содержит строку подключения очереди сообщений RabbitMQ. Триггер не будет работать при указании строки подключения напрямую, а не через параметр приложения local.settings.json. Например, если задано connectionStringSetting: "rabbitMQConnection" в файле local.settings.json и в приложении-функции, вам потребуется параметр, подобный "rabbitMQConnection" : "< ActualConnectionstring >".
порт Возвращает или задает используемый порт. По умолчанию принимает значение 0, которое указывает на порт клиента RabbitMQ по умолчанию: 5672.

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

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

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

Внимание

Привязка RabbitMQ не поддерживает проверку подлинности и управляемые удостоверения Microsoft Entra. Azure Key Vault можно использовать для централизованного управления строка подключения RabbitMQ. Дополнительные сведения см. в разделе "Управление подключениями".

Тип параметра, поддерживаемый триггером RabbitMQ, зависит от версии среды выполнения Функций, версии пакета расширения и используемой модальности C#.

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

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

Для выходной привязки можно использовать параметры следующих типов:

  • byte[] Если при выходе из функции параметр имеет значение NULL, то служба "Функции" не создает сообщение.
  • string Если при выходе из функции параметр имеет значение NULL, то служба "Функции" не создает сообщение.
  • POJO. Если значение параметра не отформатировано как объект Java, возвращается ошибка.

Сообщение очереди доступно через context.bindings.<NAME>, где <NAME> совпадает с именем, определенным в function.json. Если полезные данные представлены в виде JSON, значение десериализируется в объект.

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