我在.NET核心2.0中使用Azure Function
创建Queue Trigger
时遇到问题。
在microservice
体系结构中,当在队列中创建用于创建用户的新消息时,服务必须接收此消息并根据其中的信息在数据库中创建用户。
在Visual Studio 2017中,我在Azure Function
下创建了一个新项目。
从新模板中选择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"
}
]
}
这是我的错误页面
警告:找不到名称的值 'https://MyDevServiceBus.servicebus.windows.net'in local.settings.json匹配'connection'属性设置 'queueTrigger'中 'C:\项目\ CustomerProfile.AzureService \ BIN \调试\ netstandard2.0 \功能1 \ function.json'。 您可以运行'func azure functionapp fetch-app-settings '或指定连接字符串 local.settings.json。 [12/03/2018 12:10:41]阅读主机配置 文件 'C:\项目\ CustomerProfile.AzureService \ BIN \调试\ 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,Version = 2.0.11353.0,ProcessId = 8992, Debug = False,Attempt = 0,FunctionsExtensionVersion = beta)正在听 http://localhost:7071/按CTRL-C退出... [12/03/2018 12:10:42] A. 发生ScriptHost错误[12/03/2018 12:10:42] Microsoft.Azure.WebJobs.Host:错误索引方法'Function1.Run'。 Microsoft.Azure.WebJobs.Host:Microsoft Azure WebJobs SDK “QueueConnection”连接字符串缺失或为空。微软 可以在以下设置Azure存储帐户连接字符串 方法:[12/03/2018 12:10:42] 1.设置名为的连接字符串 'AzureWebJobsQueueConnection'在connectionStrings部分中 .config文件格式如下,或[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”连接字符串缺失或为空。微软 可以在以下设置Azure存储帐户连接字符串 方法:[12/03/2018 12:10:42] 1.设置名为的连接字符串 'AzureWebJobsQueueConnection'在connectionStrings部分中 .config文件格式如下,或[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存储帐户连接 string可以通过以下方式设置:[12/03/2018 12:10:42] 1.设置 中的连接字符串名为“AzureWebJobsQueueConnection” .config文件的connectionStrings部分采用以下格式 ,或[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上有什么例子吗?提前谢谢。
答案 0 :(得分:7)
您正在混淆Azure Service Bus和Azure存储队列。 Queue Trigger
用于存储队列,因此Connection
是存储帐户的连接字符串,Path
是队列路径。
要使用Service Bus,您应该使用Service Bus Trigger
。在.NET Core / v2版本的函数上设置该函数需要花费更多的精力,因为Visual Studio工具尚不可用。
我建议暂时使用函数v1作为服务总线。
ServiceBusTrigger
是要使用的正确类型。您应将其Connection
属性设置为包含Service Bus连接字符串的设置名称,而不是连接字符串本身。因此
ServiceBusTrigger
放在您的函数定义上。MyServiceBusConnection
的设置(或您喜欢的任何其他名称)。将其设置为sb://myservicebus.servicebus.windows.net/;...
[ServiceBusTrigger("myqueue", AccessRights.Manage, Connection = "MyServiceBusConnection")]
答案 1 :(得分:0)
由于您在评论中提到您在查找服务总线队列触发器模板时遇到问题,这就是它的样子 - 正如Mikhail在他的回答中提到的那样,用应用程序的名称填写Connection=""
设置具有连接字符串
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.ServiceBus.Messaging;
namespace FunctionApp11
{
public static class Function2
{
[FunctionName("Function2")]
public static void Run([ServiceBusTrigger("myqueue", AccessRights.Manage, Connection = "")]string myQueueItem, TraceWriter log)
{
log.Info($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
}
}
}