用于向 Postgres DB 批量插入的 Azure 持久函数

Azure durable function for bulk insert toward Postgres DB

我的 Azure 的无服务器架构由一些生产者、一个服务总线、一个 un azure 函数和一个 Postgres DB 组成(见下图)。

Postgres 数据库是遗留要求,我无法更改它。

操作流程如下:

  1. 生产者向服务总线发送具有时间频率的消息(大约 9000 messagges/minute)。每个生产者发送一条消息。
  2. 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
      }
    }
  }
}