在 Azure 函数中将服务总线与 SQL 服务器一起使用的最有效方法是什么?

What is the most efficient way of using service bus together with SQL Server within Azure functions?

我正在处理 Azure 函数,我需要从服务总线队列读取数据并将其写入 Azure SQL table.

我的问题是:服务总线部分是反应式的,每条到达队列的新消息都会被触发,而设置和打开 Azure SQL 连接的整个业务只需要下注设置一次,最好是手前。

目前,我的功能是这样的:

using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
using System.Data.SqlClient;
using System.Text;

namespace SbTrigger01
{
    public static class SbTrigger02
    {
       static SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();

        [FunctionName("SbTrigger02")]
        public static void Run([ServiceBusTrigger("BasicQueue", Connection = "servicebus00ghjs1968_RootManageSharedAccessKey_SERVICEBUS")]string myQueueItem, ILogger log)
        {
            builder.DataSource = "myazuresql001968.database.windows.net";
            builder.UserID = "sqladminwek1968";
            builder.Password = "@Myazuresql00sdjhj1968";
            builder.InitialCatalog = "mySampleDatabase";

            using (SqlConnection conn = new SqlConnection(builder.ConnectionString))
            {
                conn.Open();

                string query = "INSERT INTO [SalesLT].[messages] (message) VALUES(@Message)";
                SqlCommand cmd = new SqlCommand(query, conn);
                System.Diagnostics.Trace.TraceError(myQueueItem);
                cmd.Parameters.AddWithValue("@Message", myQueueItem);

                cmd.ExecuteNonQuery();
            }

            log.LogInformation($" {myQueueItem}");
        }
    }
}

我怀疑,此代码强制为每个新服务总线消息定义和打开 SQL 连接,这非常糟糕。

是否有更好的方法来构造此代码,使 SQL 连接仅声明和打开一次,并且每个新服务总线消息仅执行 INSERT 语句?

恭喜你可以从中得到答案link:

我帮你post把它当做答案。这可能对其他社区成员有益。

感谢肖恩·费尔德曼和伊恩·坎普。