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


Общие сведения о триггере 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 использует заметку @RabbitMQTrigger из типов Java RabbitMQ для описания конфигурации триггера очереди RabbitMQ. Функция извлекает сообщение, помещенное в очередь, и добавляет его в журналы.

@FunctionName("RabbitMQTriggerExample")
public void run(
    @RabbitMQTrigger(connectionStringSetting = "rabbitMQConnectionAppSetting", queueName = "queue") String input,
    final ExecutionContext context)
{
    context.getLogger().info("Java HTTP trigger processed a request." + input);
}

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

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

{​​
    "bindings": [
        {​​
            "name": "myQueueItem",
            "type": "rabbitMQTrigger",
            "direction": "in",
            "queueName": "queue",
            "connectionStringSetting": "rabbitMQConnectionAppSetting"
        }​​
    ]
}​​

Ниже показан код сценария JavaScript.

module.exports = async function (context, myQueueItem) {​​
    context.log('JavaScript RabbitMQ trigger function processed work item', myQueueItem);
}​​;

В примере ниже показано, как прочитать сообщение очереди RabbitMQ через триггер.

Привязка RabbitMQ определяется в файле function.json, в котором для параметра type задано значение RabbitMQTrigger.

{​​
    "scriptFile": "__init__.py",
    "bindings": [
        {​​
            "name": "myQueueItem",
            "type": "rabbitMQTrigger",
            "direction": "in",
            "queueName": "queue",
            "connectionStringSetting": "rabbitMQConnectionAppSetting"
        }​​
    ]
}​​
import logging
import azure.functions as func

def main(myQueueItem) -> None:
    logging.info('Python RabbitMQ trigger function processed a queue item: %s', myQueueItem)

Атрибуты

Библиотеки 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)
{

Заметки

Заметка RabbitMQTrigger позволяет создать функцию, которая выполняется при создании сообщения 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 Описание
тип Должен иметь значениеRabbitMQTrigger.
направление Должен иметь значениеin.
имя Имя переменной, представляющей очередь в коде функции.
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.

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

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

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

Внимание

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

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

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

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

См. заметки для Java.

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

Очереди недоставленных сообщений

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

Параметры файла host.json

В этом разделе описаны параметры конфигурации, доступные для этой привязки в версии 2.x и более поздних версиях. Параметры в файле host.json применяются ко всем функциям в экземпляре приложения-функции. Дополнительные сведения о параметрах конфигурации приложения-функции см. вhost.json справочнике по функциям Azure.

{
    "version": "2.0",
    "extensions": {
        "rabbitMQ": {
            "prefetchCount": 100,
            "queueName": "queue",
            "connectionString": "amqp://user:password@url:port",
            "port": 10
        }
    }
}
Свойство По умолчанию Описание
количество предварительных выборок 30 Возвращает или задает число сообщений, которое получатель сообщений может запросить одновременно и кэширует.
название очереди Н/Д Имя очереди, из которой нужно получать сообщения.
connectionString Н/Д Строка подключения очереди сообщений RabbitMQ. Строка подключения указывается непосредственно здесь, а не с помощью параметра приложения.
порт 0 Возвращает или задает используемый порт (игнорируется при использовании параметра connectionString). По умолчанию принимает значение 0, которое указывает на порт клиента rabbitmq по умолчанию: 5672.

Локальное тестирование

Примечание.

Строка подключения имеет приоритет над параметрами hostName, userName и password. Если все они заданы, то строка подключения их переопределяет.

В ходе локального тестирования без строки подключения параметры hostName, userName и password, если они применимы, задаются в разделе rabbitMQ файла host.json:

{
    "version": "2.0",
    "extensions": {
        "rabbitMQ": {
            ...
            "hostName": "localhost",
            "username": "userNameSetting",
            "password": "passwordSetting"
        }
    }
}
Свойство По умолчанию Описание
имя хоста Н/Д (игнорируется при использовании connectionString)
Имя узла очереди (например, 10.26.45.210)
userName Н/Д (игнорируется при использовании connectionString)
Имя для доступа к очереди
пароль Н/Д (игнорируется при использовании connectionString)
Пароль для доступа к очереди

Настройка масштабирования среды выполнения

Чтобы триггер RabbitMQ можно было масштабировать на несколько экземпляров, необходимо включить параметр мониторинг масштаба среды выполнения.

На портале его можно найти в разделе Конфигурация>Параметры среды выполнения функции для приложения функции.

VNETToggle

В интерфейсе командной строки (CLI) мониторинг масштаба среды выполнения можно включить с помощью следующей команды:

az resource update -g <resource_group> -n <function_app_name>/config/web --set properties.functionsRuntimeScaleMonitoringEnabled=1 --resource-type Microsoft.Web/sites

Мониторинг конечной точки RabbitMQ

Для мониторинга очередей и обмена для определенной конечной точки RabbitMQ:

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