Я работаю над функцией Azure, в которой мне нужно прочитать данные из очереди служебной шины и записать их в таблицу Azure SQL.
Моя проблема: Часть служебной шины является реактивной и запускается для каждого нового сообщения, поступающего в очередь, в то время как весь процесс установки и открытия соединения 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
?