Azure Service Bus和Azure功能队列触发器

Enr*_*ico 2 c# azure azureservicebus .net-core azure-functions

我有一个问题,创建一个Azure FunctionQueue Trigger在.NET 2.0的核心.

我想要的是

microservice体系结构中,当在队列中创建用于创建用户的新消息时,服务必须接收此消息并基于其中的信息在数据库中创建用户.

问题

在Visual Studio 2017中,我创建了一个新项目Azure Function.

Visual Studio添加新项目

从我选择的新模板Queue Trigger.

Visual Studio新模板

此屏幕不同于有关此主题的Microsoft帖子.无论如何,第一个问题是什么Connection和是什么Path.

我创建了一个Service Bus,我有自己的凭证Azure Portal.我复制了Primary Connection String并且Path是我队列的名字.

如果我运行该项目,我会收到很多错误.我发现这个链接Azure Documentation是一个简单的触发器.在这个例子中,他们使用ServiceBusTrigger而不是QueueTrigger.为了解决问题ServiceBusTrigger,我Microsoft.Azure.WebJobs.ServiceBus从Nuget 补充道.它似乎不起作用.

Azure门户服务总线

为了获得正确的凭证Azure Function,我创建了一个Azure Portal并下载了app content.

Azure门户功能

看起来像

{
  "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"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

这是我的错误页面

错误页面

警告:在local.settings.json中找不到名为" https://MyDevServiceBus.servicebus.windows.net "的值,该值与'C:\ Projects\CustomerProfile.AzureService\bin\Debug中'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上有什么例子吗?提前致谢.

Mik*_*kov 7

您正在混淆Azure Service Bus和Azure存储队列.Queue Trigger用于存储队列,Connection存储帐户的连接字符串Path也用于队列路径.

要使用Service Bus,您应该使用Service Bus Trigger.在.NET Core/v2版本的函数上设置该函数需要花费更多的精力,因为Visual Studio工具尚不可用.

我建议暂时使用函数v1作为Service Bus.

ServiceBusTrigger是正确的类型.您应将其Connection属性设置为包含Service Bus连接字符串的设置名称,而不是连接字符串本身.从而

  1. 穿上ServiceBusTrigger你的功能定义.
  2. 添加一个名为MyServiceBusConnection(或您喜欢的任何其他名称)的设置.设置为sb://myservicebus.servicebus.windows.net/;...
  3. 引用触发器定义中的设置名称,例如 [ServiceBusTrigger("myqueue", AccessRights.Manage, Connection = "MyServiceBusConnection")]