azure - HTTP 触发 Azure 函数上的 Singleton scopeId 支持的绑定
问题描述
我不清楚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 触发器函数支持什么。
解决方案
在 Azure 函数中实现单例模式有两种方法。
首先:
您可以通过设置WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT
或来做到这一点maxConcurrentCalls
。
第二种:
创建一个完整的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>();
}
}
推荐阅读
- python - 用Python中的组的模式值替换缺失值过滤行组
- r - 如何在 lm 模型的 summary() 中放置一个循环?
- html - 第一列和第一行固定的可滚动表
- python - Python和C为算法返回不同的值
- ballerina - 错误:无法解析模块 'ballerina/sql'
- xml - XML to csv 做正确的 xslt
- php - Laravel socalite - 永远不会触发 handleProviderCallback
- android - 一段时间后呼叫检测广播接收器停止在后台工作
- ruby-on-rails-5 - 当代码不正确时应该引发错误
- spring - 如何在 intellij 中创建 gradle 和 spring 项目(终极版)