用于向 Postgres DB 批量插入的 Azure 持久函数
Azure durable function for bulk insert toward Postgres DB
我的 Azure 的无服务器架构由一些生产者、一个服务总线、一个 un azure 函数和一个 Postgres DB 组成(见下图)。
Postgres 数据库是遗留要求,我无法更改它。
操作流程如下:
- 生产者向服务总线发送具有时间频率的消息(大约 9000 messagges/minute)。每个生产者发送一条消息。
- azure 函数使用消息并将一行插入 Postgres DB
为了避免大量的数据库负载并打开大量连接,我会将消息聚合到函数中并通过批量插入来插入它们。
我可以使用持久函数(实体函数)吗?
你能帮帮我吗?最好的问候
如果您有多个步骤,我会考虑使用 Durable Functions,这样您就可以使用 Durable Functions 构建您的工作流程。在你的情况下,我要做的是在你的 hosts.json 文件上使用 maxConcurrentCalls 参数,这样你就可以为你的数据库的并发调用设置一个可接受的值。请参考 this sample 以获取更多信息。
好的,按照评论中的讨论让它工作。您不需要持久函数,但您应该从服务总线批量接收(然后写入)消息。这是一个批处理示例:
[FunctionName("QueueTriggeredFunction")]
public static void Run([ServiceBusTrigger("demofunctionqueue", Connection = "queueconstring")]string[] myQueueItems, ILogger log)
{
log.LogInformation("Received messages {count}", myQueueItems.Length);
foreach (var myQueueItem in myQueueItems)
{
log.LogInformation($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
}
}
host.json
设置每批最大消息数
{
"version": "2.0",
"extensions": {
"serviceBus": {
"batchOptions": {
"maxMessageCount": 200
},
"messageHandlerOptions": {
"maxConcurrentCalls": 1
}
}
}
}
我的 Azure 的无服务器架构由一些生产者、一个服务总线、一个 un azure 函数和一个 Postgres DB 组成(见下图)。
Postgres 数据库是遗留要求,我无法更改它。
操作流程如下:
- 生产者向服务总线发送具有时间频率的消息(大约 9000 messagges/minute)。每个生产者发送一条消息。
- azure 函数使用消息并将一行插入 Postgres DB
为了避免大量的数据库负载并打开大量连接,我会将消息聚合到函数中并通过批量插入来插入它们。 我可以使用持久函数(实体函数)吗?
你能帮帮我吗?最好的问候
如果您有多个步骤,我会考虑使用 Durable Functions,这样您就可以使用 Durable Functions 构建您的工作流程。在你的情况下,我要做的是在你的 hosts.json 文件上使用 maxConcurrentCalls 参数,这样你就可以为你的数据库的并发调用设置一个可接受的值。请参考 this sample 以获取更多信息。
好的,按照评论中的讨论让它工作。您不需要持久函数,但您应该从服务总线批量接收(然后写入)消息。这是一个批处理示例:
[FunctionName("QueueTriggeredFunction")]
public static void Run([ServiceBusTrigger("demofunctionqueue", Connection = "queueconstring")]string[] myQueueItems, ILogger log)
{
log.LogInformation("Received messages {count}", myQueueItems.Length);
foreach (var myQueueItem in myQueueItems)
{
log.LogInformation($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
}
}
host.json
设置每批最大消息数
{
"version": "2.0",
"extensions": {
"serviceBus": {
"batchOptions": {
"maxMessageCount": 200
},
"messageHandlerOptions": {
"maxConcurrentCalls": 1
}
}
}
}