我有一个问题是在.NET核心2.0中使用 Queue Trigger
创建 Azure Function
.
我想要什么
在 microservice
体系结构中,当在队列中创建用于创建用户的新消息时,服务必须接收此消息并基于其中的信息在数据库中创建用户 .
问题
在Visual Studio 2017中,我在 Azure Function
下创建了一个新项目 .
从 New Template 我选择 Queue Trigger
.
此屏幕与Microsoft post有关此主题的不同之处 . 无论如何,第一个问题是 Connection
和 Path
是什么 .
我创建了一个 Service Bus
,我从 Azure Portal
获得了我的凭证 . 我复制 Primary Connection String
和 Path
是我的队列名称 .
如果我运行该项目,我会收到很多错误 . 我在 Azure Documentation
找到了这个链接simple trigger . 在此示例中,他们使用 ServiceBusTrigger
而不是 QueueTrigger
. 为了解决 ServiceBusTrigger
,我从Nuget添加了 Microsoft.Azure.WebJobs.ServiceBus
. 它似乎不起作用 .
要为我的 Azure Function
拥有正确的凭据,我在 Azure Portal
中创建了一个并下载了 app content
.
看起来像
{
"IsEncrypted": false,
"Values": {
"FUNCTIONS_EXTENSION_VERSION": "beta",
"ScmType": "None",
"WEBSITE_AUTH_ENABLED": "False",
"AzureWebJobsDashboard": "DefaultEndpointsProtocol=https;AccountName=my;AccountKey=something",
"WEBSITE_NODE_DEFAULT_VERSION": "6.5.0",
"WEBSITE_CONTENTAZUREFILECONNECTIONSTRING": "DefaultEndpointsProtocol=https;AccountName=my;AccountKey=something",
"WEBSITE_CONTENTSHARE": "createprofile-98873b60",
"WEBSITE_SITE_NAME": "CreateProfile",
"WEBSITE_SLOT_NAME": "Production",
"AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=createprofil8796;AccountKey=something"
},
"configurationSource": "config",
"bindings": [
{
"type": "serviceBusTrigger",
"connection": "sb://myservicebus.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=something",
"queueName": "testqueue",
"accessRights": "manage",
"name": "myQueueItem",
"direction": "in"
}
]
}
这是我的错误页面
警告:在local.settings.json中找不到名为“https://MyDevServiceBus.servicebus.windows.net”的值,该值与'C:\ Projects \ CustomerProfile.AzureService \ bin \中'queueTrigger'上设置的'connection'属性相匹配调试\ netstandard2.0 \功能1 \ function.json” . 您可以运行'func azure functionapp fetch-app-settings'或在local.settings.json中指定连接字符串 . [12/03/2018 12:10:41]读取主机配置文件'C:\ Projects \ CustomerProfile.AzureService \ bin \ Debug \ netstandard2.0 \ host.json'[12/03/2018 12:10:41]主机配置文件读取:[12/03/2018 12:10:41] {[12/03/2018 12:10:41]} [12/03/2018 12:10:42]生成1个工作职能[12/03/2018 12:10:42]启动主机(HostId = desktop7fksikf-631144646,版本= 2.0.11353.0,ProcessId = 8992,Debug = False,Attempt = 0,FunctionsExtensionVersion = beta)在http:// localhost上侦听:7071 /按CTRL-C退出... [12/03/2018 12:10:42]发生ScriptHost错误[12/03/2018 12:10:42] Microsoft.Azure.WebJobs.Host:错误索引方法'Function1.Run' . Microsoft.Azure.WebJobs.Host:Microsoft Azure WebJobs SDK“QueueConnection”连接字符串缺失或为空 . 可以通过以下方式设置Microsoft Azure存储帐户连接字符串:[12/03/2018 12:10:42] 1.在.config文件的connectionStrings部分中以下列格式设置名为“AzureWebJobsQueueConnection”的连接字符串或者[12/03/2018 12:10:42] 2.设置名为“AzureWebJobsQueueConnection”的环境变量,或[12/03/2018 12:10:42] 3.设置JobHostConfiguration的相应属性 . [12/03/2018 12:10:42]错误索引方法'Function1.Run'[12/03/2018 12:10:42] Microsoft.Azure.WebJobs.Host:错误索引方法'Function1.Run' . Microsoft.Azure.WebJobs.Host:Microsoft Azure WebJobs SDK“QueueConnection”连接字符串缺失或为空 . 可以通过以下方式设置Microsoft Azure存储帐户连接字符串:[12/03/2018 12:10:42] 1.在.config文件的connectionStrings部分中以下列格式设置名为“AzureWebJobsQueueConnection”的连接字符串或者[12/03/2018 12:10:42] 2.设置名为“AzureWebJobsQueueConnection”的环境变量,或[12/03/2018 12:10:42] 3.设置JobHostConfiguration的相应属性 . [12/03/2018 12:10:42]找不到工作职能 . 尝试公开您的工作类和方法 . 如果您正在使用绑定扩展(例如ServiceBus,Timers等),请确保您已在启动代码中调用扩展的注册方法(例如config.UseServiceBus(),config.UseTimers()等) . [12/03/2018 12:10:42]工作主持人开始[12/03/2018 12:10:42]以下1个函数出错:[12/03/2018 12:10:42]运行:Microsoft .Azure.WebJobs.Host:错误索引方法'Function1.Run' . Microsoft.Azure.WebJobs.Host:Microsoft Azure WebJobs SDK“QueueConnection”连接字符串缺失或为空 . 可以通过以下方式设置Microsoft Azure存储帐户连接字符串:[12/03/2018 12:10:42] 1.在.config文件的connectionStrings部分中以下列格式设置名为“AzureWebJobsQueueConnection”的连接字符串或者[12/03/2018 12:10:42] 2.设置名为“AzureWebJobsQueueConnection”的环境变量,或[12/03/2018 12:10:42] 3.设置JobHostConfiguration的相应属性 . [12/03/2018 12:10:42] [12/03/2018 12:10:42] [12/03/2018 12:10:42]通过实例ID“000000000000000000000000E37F5049”获取的主机锁租约 .
这种 Azure Function
的正确实施是什么? GitHub上有什么例子吗?提前致谢 .
2 回答
您正在混淆Azure Service Bus和Azure存储队列 .
Queue Trigger
用于存储队列,因此Connection
是存储帐户的连接字符串,Path
用于队列路径 .要使用Service Bus,您应该使用
Service Bus Trigger
. 它因为Visual Studio工具尚不可用,所以需要花费更多的精力在.NET Core / v2版本的函数上设置它 .我建议暂时使用函数v1作为Service Bus .
ServiceBusTrigger
是要使用的正确类型 . 您应将其Connection
属性设置为包含Service Bus连接字符串的设置名称,而不是连接字符串本身 . 从而将
ServiceBusTrigger
放在函数定义中 .添加一个名为
MyServiceBusConnection
的设置(或您喜欢的任何其他名称) . 将其设置为sb://myservicebus.servicebus.windows.net/;...
从触发定义中引用设置名称,例如
[ServiceBusTrigger("myqueue", AccessRights.Manage, Connection = "MyServiceBusConnection")]
由于您在评论中提到您在查找服务总线队列触发器模板时遇到问题,所以这就是它的样子 - 正如Mikhail在他的回答中提到的那样,使用具有连接字符串的应用程序设置的名称填写
Connection=""