Поддерживаемые привязки для Singleton scopeId в HTTP-триггере с функцией Azure

Я не понимаю, как работает параметр scopeId в SingletonAttribute. В частности, работает ли параметр scopeId для функций HTTP Trigger Azure, когда вы привязываете его к параметру маршрута? Как работает привязка? К каким переменным / значениям я могу привязаться?

Например:

[Singleton("{input}", Mode = SingletonMode.Listener)]
public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "v1/{input:length(1,30)}")] Microsoft.AspNetCore.Http.HttpRequest req, string input, ILogger log) {
    return new OkObjectResult(input + " world");
}

Запрос HTTP POST к этой функции с URI v1 / hello вернет: Hello world.

Но будет ли атрибут Singleton работать так, чтобы все запросы к «v1 / hello» выполнялись последовательно, тогда как два одновременных запроса с одним на «v1 / first» и другим на «v1 / second» выполнялись параллельно?

Я вижу из этот ответ, что для триггеров служебной шины вы можете напрямую привязать свойства внутри объекта Message.
Также в документация есть пример функции запуска очереди с привязкой scopeId к свойству в WorkItem объект.
Непонятно, что поддерживается для функций триггера HTTP.


person davekats    schedule 16.01.2021    source источник


Ответы (2)


У вас есть два способа реализовать одноэлементный режим в функции Azure.

Первый:

Вы можете сделать это, установив WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT или maxConcurrentCalls.

Одноэлементная функция Azure, работающая как отдельные экземпляры

Второй тип:

Создайте полный проект функции, похожий на webapp, и реализуйте его в Configure.

Использование внедрения зависимостей в .NET Функции Azure

public class Startup : FunctionsStartup
{
    public override void Configure(IFunctionsHostBuilder builder)
    {
        builder.Services.AddHttpClient();

        builder.Services.AddSingleton<IMyService>((s) => {
            return new MyService();
        });

        builder.Services.AddSingleton<ILoggerProvider, MyLoggerProvider>();
    }
}
person Jason Pan    schedule 18.01.2021
comment
Спасибо за ответ, но это не ответ на мой вопрос - person davekats; 19.01.2021
comment
@davekats Я имею в виду отсутствие атрибута, как вы сказали, для установки синглтона. - person Jason Pan; 19.01.2021

Я получил ответ от Microsoft на GitHub: https://github.com/MicrosoftDocs/azure-docs/issues/69011#issuecomment-771922910

Выражения привязки для Singleton имеют то же поведение, что и для общих привязок ввода / вывода. То есть любые данные привязки из триггера доступны для справки.

В случае HttpTrigger это включает любых членов POCO, если вы привязываетесь к типу POCO, а также любые параметры маршрута. Что касается вашего кода, SingletonMode.Listener не соответствует вашим требованиям. Если вы просто пытаетесь сериализовать отдельные вызовы функции, вам следует использовать режим по умолчанию, то есть [Singleton(“{input}”)].

Чтобы ответить на ваш вопрос - да, это сериализует все вызовы v1 / hello, позволяя запускать v1 / first и v1 / second одновременно.

person davekats    schedule 05.05.2021