在 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把它当做答案。这可能对其他社区成员有益。
感谢肖恩·费尔德曼和伊恩·坎普。
我正在处理 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把它当做答案。这可能对其他社区成员有益。
感谢肖恩·费尔德曼和伊恩·坎普。