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


Выходные привязки 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# используют атрибут для определения выходной привязки, записываемой в очередь RabbitMQ.

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

Параметр Описание
Имя очереди Имя очереди, из которой нужно получать сообщения.
Имя хоста Этот параметр больше не поддерживается и игнорируется. Он будет удален в будущей версии.
ConnectionStringSetting Имя параметра приложения, содержащего строку подключения для сервера RabbitMQ. Этот параметр принимает только имя ключа параметра приложения, вы не можете напрямую задать строковое значение подключения. Дополнительные сведения см. в разделе "Подключения".
Настройка имени пользователя Этот параметр больше не поддерживается и игнорируется. Он будет удален в будущей версии.
Настройка пароля Этот параметр больше не поддерживается и игнорируется. Он будет удален в будущей версии.
порт. Возвращает или задает используемый порт. По умолчанию принимает значение 0, которое указывает на порт клиента RabbitMQ по умолчанию: 5672.
DisableCertificateValidation Возвращает или задает значение, указывающее, следует ли отключать проверку сертификата. Не рекомендуется для рабочей среды. Не применяется при отключении SSL.

Заметки

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

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

Параметр Описание
queueName Имя очереди, из которой нужно получать сообщения.
connectionStringSetting Имя параметра приложения, содержащего строку подключения для сервера RabbitMQ. Этот параметр принимает только имя ключа параметра приложения, вы не можете напрямую задать строковое значение подключения. Дополнительные сведения см. в разделе "Подключения".
disableCertificateValidation Возвращает или задает значение, указывающее, следует ли отключать проверку сертификата. Не рекомендуется для рабочей среды. Не применяется при отключении SSL.

Настройка

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

Свойство в function.json Описание
тип Должен иметь значениеRabbitMQ.
направление Должен иметь значениеout.
имя Имя переменной, представляющей очередь в коде функции.
queueName Имя очереди, в которую отправляются сообщения.
connectionStringSetting Имя параметра приложения, содержащего строку подключения для сервера RabbitMQ. Этот параметр принимает только имя ключа параметра приложения, вы не можете напрямую задать строковое значение подключения. Дополнительные сведения см. в разделе "Подключения".
disableCertificateValidation Возвращает или задает значение, указывающее, следует ли отключать проверку сертификата. Не рекомендуется для рабочей среды. Не применяется при отключении SSL.

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

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

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

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

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

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

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

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

Connections

Внимание

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

Начиная с версии 2.x расширения, hostNameuserNameSettingи passwordSetting больше не поддерживаются для определения подключения к серверу RabbitMQ. Вместо этого необходимо использовать connectionStringSetting.

Свойство connectionStringSetting может принимать только имя пары "ключ-значение" в параметрах приложения. Невозможно напрямую задать строковое значение строки подключения в привязке.

Например, если вы установили connectionStringSettingrabbitMQConnection значение в определении привязки, приложение-функция должна иметь параметр приложения с именем rabbitMQConnection , возвращающим значение подключения, например amqp://myuser:***@contoso.rabbitmq.example.com:5672 или ссылку Azure Key Vault.

При локальном запуске необходимо также иметь значение ключа для connectionStringSetting определенного в файлеlocal.settings.json . В противном случае приложение не может подключиться к службе с локального компьютера и возникает ошибка.