1

我不清楚scopeId参数的SingletonAttribute工作原理。具体来说,scopeId当您将其绑定到路由参数时,该参数是否适用于 HTTP Trigger Azure Functions?绑定是如何工作的?我可以绑定哪些变量/值?

例如:

[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");
}

使用 URI 'v1/hello' 对该函数的 HTTP POST 请求将返回:“Hello world”。

但是,Singleton 属性是否会起作用,使得对“v1/hello”的所有请求都将串行运行,而两个同时请求,一个对“v1/first”,另一个对“v1/second”将并行运行?

我从这个答案中看到,对于服务总线触发器,您可以直接绑定到Message 对象中的属性。
此外,在文档中还有一个 Queue Trigger Function 示例,其中 scopeId 绑定到 WorkItem 对象中的属性。
目前还不清楚 HTTP 触发器函数支持什么。

4

2 回答 2

0

在 Azure 函数中实现单例模式有两种方法。

首先:

您可以通过设置WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT或来做到这一点maxConcurrentCalls

单例 Azure 函数作为单独的实例运行

第二种:

创建一个完整的Function项目,类似于webapp,并在Configure.

在 .NET Azure Functions 中使用依赖注入

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>();
    }
}
于 2021-01-18T03:07:17.173 回答
0

我在 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 同时运行。”

于 2021-05-05T21:46:56.210 回答