Azure долговечная функция для объемной вставки в направлении Postgres DB - PullRequest
1 голос
/ 27 февраля 2020
Безсерверная архитектура

my Azure состоит из некоторых производителей, служебной шины, функции azure и базы данных Postgres (см. Рисунок ниже).

БД Postgres является устаревшим требованием, я не могу его изменить.

Ниже приводится последовательность операций:

  1. Производители отправляют сообщение с временная частота по отношению к служебной шине (около 9000 сообщений в минуту). Каждый производитель отправляет одно сообщение.
  2. Функции azure принимают сообщение и вставляют строку в Postgres DB

, чтобы избежать сильной загрузки БД и открыть много соединений, я хотел бы объединить сообщения в функцию и вставить их путем массовой вставки. Могу ли я хорошо работать с долговременной функцией (функцией лица)?

Можете ли вы мне помочь, пожалуйста? С наилучшими пожеланиями

enter image description here

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Хорошо, заставил это работать как обсуждено в комментариях. Вам не нужна долговременная функция, но вы должны получать (а затем записывать) сообщения пакетами из служебной шины. Вот пример пакета:

[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
      }
    }
  }
}
1 голос
/ 27 февраля 2020

Я бы рассмотрел Durable Functions на всякий случай, если у вас есть несколько шагов, чтобы вы могли построить свой рабочий процесс с использованием Durable Functions. В вашем случае я бы поэкспериментировал с параметром maxConcurrentCalls на вашем хосте. json, чтобы вы могли затем установить приемлемое значение для одновременных вызовов для вашей БД. Пожалуйста, укажите этот образец , чтобы получить больше информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...