是否可以在运行时传递 Azure Function ServiceBusTrigger 连接

Is it possible to Pass Azure Function ServiceBusTrigger connection at runtime

我的代码如下所示:

public class Startup : IWebJobsStartup
{

  public async void Configure(IWebJobsBuilder builder)
   {

   Get Connection string Via HTTP Service.

       ServiceBusConnectionString = jArray["connectionString"].ToString();

   }

}

我想像这样传递连接

[FunctionName("FunctionTopicMessageLogger")]
        public  void Run([ServiceBusTrigger("topic", "FunctionTopicMessageLogger",Connection = **ServiceBusConnectionString** )]Message mySbMsg)
        {

        }

这是我第一次 Local.setting.json 文件

{
  "IsEncrypted": false,
  "Values": {

    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "Connectinstring": " "

  }
} 

问题是连接只接受 Const Parameter(所以不允许更改)所以我试图写成 local.setting.json 并尝试从那里读取它,当我是 运行 时,我第一次收到错误消息,第二次连接就在那里,所以它工作正常。

是不是我做的不对请大家指教

如果您打算使用 local.settings.json 中的键 Connectionstring,您应该能够通过这样做自动从那里获取值:

public static void Run([ServiceBusTrigger("topic", "FunctionTopicMessageLogger", Connection = "connectionString")]string mySbMsg)

连接的值是 local.settings.json 文件中密钥的名称。

您的问题的解决方案中有两个重要部分。

  1. 在使用服务总线触发器创建 Azure 函数期间,您必须指定将用于检索连接字符串值的连接字符串参数的名称。在这种情况下,如果您键入 "ServiceBusConnectionString",则必须在 "ConnectionStrings" 部分的 local.settings.json 文件中添加这样的配置参数:

    {
       "IsEncrypted": false,
       "Values": {
                    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
                    "FUNCTIONS_WORKER_RUNTIME": "dotnet"
                  },
    
     "ConnectionStrings": {
                 "ServiceBusConnectionString": "xxx"
      }
    }
    
  2. 将你的函数部署到 Azure 后,你应该使用门户中的 "Configuration" 部分并且你应该避免使用 "local.settings.json" 文件,因为它仅用于本地开发:

希望对您有所帮助。

如果您没有很多不同的服务总线,您可以为每个不同的 connectionString 创建一个函数。

每个函数在启动前需要知道connectionString,并开始在服务总线中等待消息。

如果必须动态执行此操作,则不必使用 Azure 函数,可以使用服务总线 SDK:

在这里您可以看到如何手动管理客户端:https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dotnet-get-started-with-queues

希望对您有所帮助!