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

Примечание

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

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

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

Пример

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

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

[FunctionName("RabbitMQOutput")]
[return: RabbitMQ(QueueName = "outputQueue", ConnectionStringSetting = "rabbitMQConnectionAppSetting")]
public static string Run([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer, ILogger log)
{
    log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
    return $"{DateTime.Now}";
}

В следующем примере показано, как использовать интерфейс IAsyncCollector для отправки сообщений:

[FunctionName("RabbitMQOutput")]
public static async Task Run(
[RabbitMQTrigger("sourceQueue", ConnectionStringSetting = "rabbitMQConnectionAppSetting")] string rabbitMQEvent,
[RabbitMQ(QueueName = "destinationQueue", ConnectionStringSetting = "rabbitMQConnectionAppSetting")]IAsyncCollector<string> outputEvents,
ILogger log)
{
     // send the message
    await outputEvents.AddAsync(JsonConvert.SerializeObject(rabbitMQEvent));
}

В следующем примере показано, как отправлять сообщения в виде POCO:

namespace Company.Function
{
    public class TestClass
    {
        public string x { get; set; }
    }
    public static class RabbitMQOutput{
        [FunctionName("RabbitMQOutput")]
        public static async Task Run(
        [RabbitMQTrigger("sourceQueue", ConnectionStringSetting = "rabbitMQConnectionAppSetting")] TestClass rabbitMQEvent,
        [RabbitMQ(QueueName = "destinationQueue", ConnectionStringSetting = "rabbitMQConnectionAppSetting")]IAsyncCollector<TestClass> outputPocObj,
        ILogger log)
        {
            // send the message
            await outputPocObj.AddAsync(rabbitMQEvent);
        }
    }
}

Следующая функция 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# используйте RabbitMQAttribute.

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

[FunctionName("RabbitMQOutput")]
public static async Task Run(
[RabbitMQTrigger("SourceQueue", ConnectionStringSetting = "TriggerConnectionString")] string rabbitMQEvent,
[RabbitMQ("DestinationQueue", ConnectionStringSetting = "OutputConnectionString")]IAsyncCollector<string> outputEvents,
ILogger log)
{
    ...
}

Заметки

Заметка RabbitMQOutput позволяет создать функцию, которая выполняется при создании сообщения 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 Нужно задать значение RabbitMQ.
direction Нужно задать значение out.
name Имя переменной, представляющей очередь в коде функции.
queueName Имя очереди, в которую отправляются сообщения.
Имя узла Имя узла очереди, например 10.26.45.210. Игнорируется при использовании connectStringSetting.
userName Имя параметра приложения, содержащего имя пользователя для доступа к очереди, например UserNameSetting: "< UserNameFromSettings >". Игнорируется при использовании connectStringSetting.
password Имя параметра приложения, содержащего имя пользователя для доступа к очереди, например 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#.

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

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

При работе с функциями C#:

  • В асинхронных функциях нужно использовать возвращаемое значение или IAsyncCollector вместо параметра out.

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

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

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

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

Дальнейшие действия