У меня есть функция Azure с использованием триггера служб автобусы, созданной в C#. < /p>
Эта функция определяет сообщение об сервисной шине (которое содержит URL -адрес blob в файл) и вызывает API, API создает запись DB, затем заполняет запись DB, используя файл Blob и удаляет ее. < /P>
Процесс API может занять до 40 секунд. < /P>
После окончания API он посылает ответ на функцию Azure, которая выполняет «overseMessageAsync» или «DeadletMersessAgeAsync» в зависимости от того, был ли ответ API положительным или нет. < /p>
Проблема. , основываясь на просмотре записей DB вживую, он создает несколько записей БД, а затем начинает заполнять их одновременно, даже после того, как я (предположительно) указал только по одному за раз. Когда он начнет получать сообщения, это идет один за другим (как и ожидалось), но после нескольких сообщений (6-7) он запускает несколько сообщений за раз. < /P>
в зависимости от того, сколько сообщений Я отправляю его либо: < /p>
(сотни) правильно заполняет DB и завершает все сообщения, но отправляет многие из них Deadletter, как «Всёр не существует «(Может быть, по какой -то причине, это дает одно и то же сообщение об сервисной шине более одного раза). Это постоянно показывает успех в вызовах функций, поскольку функция выполняет ответ от API (даже если это сбой) < /li>
(тысячи) он прекращает заполнение записей БД, созданных после несколько тысяч сообщений, обрабатывая около половины из них. Отправка каждого не обработанного вызова на неудачные призывы. < /p>
Я попытался самостоятельно заполнить сообщения, установив автозаполнение FALS . < /p>
function < /p>
public async Task Run(
[ServiceBusTrigger("serviceBus", Connection = "ServiceBusConnection", AutoCompleteMessages = false)]
ServiceBusReceivedMessage message,
ServiceBusMessageActions messageActions)
{
string content = message.Body.ToString();
try
{
//Send content to EndPoint
RestClient client = new RestClient("endpoint");
RestRequest request = new RestRequest("requestendpoint", Method.Post);
request.AddQueryParameter("paramName", content);
RestResponse response = await client.ExecuteAsync(request);
if (response.IsSuccessful)
{
_logger.LogInformation($"Success");
await messageActions.CompleteMessageAsync(message);
}
else
{
var errorDetails = response.Content;
_logger.LogInformation($"Failed: {errorDetails}");
await messageActions.DeadLetterMessageAsync(message);
}
}
catch (Exception ex)
{
_logger.LogInformation($"Exception: {ex}");
await messageActions.DeadLetterMessageAsync(message);
}
}
< /code>
Настройка Azure файла хоста < /p>
{
"version": "2.0",
"extensions": {
"serviceBus": {
"prefetchCount": 1,
"messageHandlerOptions": {
"autoComplete": false,
"maxConcurrentCalls": 1
},
"sessionHandlerOptions": {
"autoComplete": false,
"maxConcurrentSessions": 1
},
"batchOptions": {
"maxMessageCount": 1,
"autoComplete": false
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... -at-a-time
Функция Azure, не обрабатывающая по одному сообщению за раз ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как применить комментарии к одному сообщению ко всем сообщениям одной категории в Wordpress
Anonymous » » в форуме Php - 0 Ответы
- 24 Просмотры
-
Последнее сообщение Anonymous
-