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


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

Примечание.

Полноценная поддержка привязок RabbitMQ доступна только для планов уровня "Премиум" и "Выделенный". В подписке с оплатой по мере использования поддержка не предоставляется.

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

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

Пример

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

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

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

Параметр Описание
QueueName Имя очереди, из которой нужно получать сообщения.
HostName Имя узла очереди, например 10.26.45.210. Игнорируется при использовании ConnectStringSetting.
UserNameSetting Имя параметра приложения, содержащего имя пользователя для доступа к очереди, например UserNameSetting: "%< UserNameFromSettings >%". Игнорируется при использовании ConnectStringSetting.
PasswordSetting Имя параметра приложения, содержащего пароль для доступа к очереди, например 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.

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

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

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

Настройка

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

Свойство в function.json Описание
type Должен иметь значениеRabbitMQ.
direction Должен иметь значениеout.
name Имя переменной, представляющей очередь в коде функции.
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 >".
port Возвращает или задает используемый порт. По умолчанию принимает значение 0, которое указывает на порт клиента RabbitMQ по умолчанию: 5672.

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

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

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

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

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

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

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

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

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

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