是否可以在运行时传递 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
文件中密钥的名称。
您的问题的解决方案中有两个重要部分。
在使用服务总线触发器创建 Azure 函数期间,您必须指定将用于检索连接字符串值的连接字符串参数的名称。在这种情况下,如果您键入 "ServiceBusConnectionString",则必须在 "ConnectionStrings" 部分的 local.settings.json 文件中添加这样的配置参数:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet"
},
"ConnectionStrings": {
"ServiceBusConnectionString": "xxx"
}
}
将你的函数部署到 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
希望对您有所帮助!
我的代码如下所示:
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
文件中密钥的名称。
您的问题的解决方案中有两个重要部分。
在使用服务总线触发器创建 Azure 函数期间,您必须指定将用于检索连接字符串值的连接字符串参数的名称。在这种情况下,如果您键入 "ServiceBusConnectionString",则必须在 "ConnectionStrings" 部分的 local.settings.json 文件中添加这样的配置参数:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "dotnet" }, "ConnectionStrings": { "ServiceBusConnectionString": "xxx" } }
将你的函数部署到 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
希望对您有所帮助!