我在 .NET core 2.0 中使用 Azure Function 创建 Queue Trigger 时遇到问题。

我想要的是

microservice 架构中,当在创建用户的队列中创建新消息时,服务必须接收此消息并根据其中的信息在数据库中创建用户。

问题

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

c# - Azure 服务总线和 Azure 函数队列触发器-LMLPHP

新模板 我选择 Queue Trigger

c# - Azure 服务总线和 Azure 函数队列触发器-LMLPHP

此屏幕与有关此主题的 Microsoft post 不同。无论如何,第一个问题是 ConnectionPath 是什么。

我创建了一个 Service Bus 并且我有来自 Azure Portal 的凭证。我复制了 Primary Connection String 并且 Path 是我的队列名称。

如果我运行该项目,我会收到很多错误。我在 Azure Documentation 上找到了 simple trigger 的链接。在这个例子中,他们使用 ServiceBusTrigger 而不是 QueueTrigger 。为了解决 ServiceBusTrigger ,我从 Nuget 添加了 Microsoft.Azure.WebJobs.ServiceBus 。它似乎不起作用。

c# - Azure 服务总线和 Azure 函数队列触发器-LMLPHP

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

c# - Azure 服务总线和 Azure 函数队列触发器-LMLPHP

看起来像

{
  "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"
    }
  ]
}

这是我的错误页面

c# - Azure 服务总线和 Azure 函数队列触发器-LMLPHP



这种 Azure Function 的正确实现是什么? GitHub 上有没有例子?提前致谢。

最佳答案

您混淆了 Azure 服务总线和 Azure 存储队列。 Queue Trigger 用于存储队列,因此 Connection 是存储帐户的连接字符串,Path 用于队列路径。

要使用服务总线,您应该使用 Service Bus Trigger 。在 .NET Core/v2 版本的函数上设置它需要更多的努力,因为 Visual Studio 工具尚不可用。

我建议暂时将 Functions v1 用于服务总线。
ServiceBusTrigger 是要使用的正确类型。您应该将其 Connection 属性设置为包含服务总线连接字符串的设置名称,而不是连接字符串本身。因此

  • ServiceBusTrigger 放在您的函数定义中。
  • 添加名为 MyServiceBusConnection(或您喜欢的任何其他名称)的设置。将其设置为 sb://myservicebus.servicebus.windows.net/;...
  • 从触发器定义中引用设置名称,例如[ServiceBusTrigger("myqueue", AccessRights.Manage, Connection = "MyServiceBusConnection")]
  • 关于c# - Azure 服务总线和 Azure 函数队列触发器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49235941/

    10-12 06:42