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


Общие сведения о триггере 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 использует заметку @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.

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

Параметр Описание
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)
{

Заметки

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

{
    "version": "2.0",
    "extensions": {
        "rabbitMQ": {
            "prefetchCount": 100,
            "queueName": "queue",
            "connectionString": "amqp://user:password@url:port",
            "port": 10
        }
    }
}
Свойство По умолчанию Description
prefetchCount 30 Возвращает или задает число сообщений, которое получатель сообщений может запросить одновременно и кэширует.
queueName Н/Д Имя очереди, из которой нужно получать сообщения.
connectionString Н/Д Строка подключения очереди сообщений RabbitMQ. Строка подключения указывается непосредственно здесь, а не с помощью параметра приложения.
port 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"
        }
    }
}
Свойство По умолчанию Description
hostName Н/Д (игнорируется при использовании connectionString)
Имя узла очереди (например, 10.26.45.210)
userName Н/Д (игнорируется при использовании connectionString)
Имя для доступа к очереди
password Н/Д (игнорируется при использовании 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:

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