Оповещение Как разделить данные HTTP на параллельные ветви и выполнить дальнейшие шаги в приложении логики? - PullRequest
0 голосов
/ 11 июля 2019

У меня есть HTTP call, которые вызывают API и gives 500 records.

Для 500 записей это заняло много времени, поэтому я подумываю об этом. в 5 разных ветках, где я передам 100 записей для выполнения все за меньшее время, что такое предложение?

Я хочу create branches which will process 100 records for each branch, но how to send 100 separate records to each branch?

Я хочу сделать это, чтобы сэкономить время выполнения, я также пробовал параллелизм в foreach, но он все еще занимает слишком много времени для обработки 500 записей, поэтому я могу разделить эти записи на ветви

enter image description here

где именно я могу использовать SplitOn

"HTTP_2": {
                        "inputs": {
                            "headers": {
                                "Authorization": "@{concat('Bearer ',variables('accesstoken'))}",
                                "Ocp-Apim-Subscription-Key": "demovalues"
                            },
                            "method": "GET",
                            "uri": "http://demo"
                        },
                        "runAfter": {
                            "Set_variable_AccessToken": [
                                "Succeeded"
                            ]
                        },
                        "type": "Http"
                    },



                     "foreach": "@body('HTTP_2')?['results']",
                        "runAfter": {
                            "Increment_variable_SkipVariable": [
                                "Succeeded"
                            ]
                        }

Для свойства SplitOn я пытался добавить вот так - но при сохранении логики приложение получало ошибку.

 "HTTP_2": {
                            "inputs": {
                                "headers": {
                                    "Authorization": "@{concat('Bearer ',variables('accesstoken'))}",
                                    "Ocp-Apim-Subscription-Key": "demovalues"
                                },
                                "method": "GET",
                                "uri": "http://demo"
                            },
                            "runAfter": {
                                "Set_variable_AccessToken": [
                                    "Succeeded"
                                ]
                            },
                            "type": "Http",
                            "splitOn": "@Body('HTTP_2')?['results']",
                        }

ошибка при получении после добавления - содержание запроса недействительно и может не может быть десериализовано: «Не удалось найти элемент splitOn» для объекта введите «FlowTemplateAction». Дорожка 'Properties.definition.actions.Run_the_code_until_all_records_completed_with_each_500_interations.actions.HTTP_2.splitOn', строка 1, позиция 494638. '

1 Ответ

2 голосов
/ 11 июля 2019

Приложение логики предоставляет свойство SplitOn в вашем триггере для запуска массива.Это для случаев, когда вы хотите обработать массив или любой повторяющийся элемент в сообщении и обработать их отдельно и сократить время выполнения, если для каждого цикла.

Для базового использования вы можете обратиться к официальному документу: Запуск нескольких прогонов .И если вы вызываете sql или таблицу Azure и т. Д. Для получения записей, вы можете использовать два логических приложения для их реализации.Эта вики может помочь вам: Отладка Azure LogicApp .

Преимущество этого подхода состоит в том, что каждое дочернее сообщение немедленно начинает обрабатываться независимо от других.Если во время дальнейшей обработки происходит сбой одного сообщения, оно не влияет на другие, и обработка исключений может выполняться на уровне дочернего сообщения.

Напомнить если со свойством SplitOn оно будетгенерировать отдельный экземпляр приложения логики и обрабатывать отдельные заказы Параллельно.

Обновление: Ниже приведен пример, который я использовал для обработки сущностей таблицы хранения.Оба запускаются по HTTP, родительский для получения значения таблицы, а затем для вызова дочернего (задайте Content-Type = application/json с телом сущностей).

enter image description here

А дочерний просто установил "splitOn": "@triggerBody()['value']" под курок. Напомним, что его можно установить только с помощью триггера.

enter image description here

И вот результат.Родитель получит значение четырех сущностей, дочерняя логика будет разделена на четыре параллельных.

enter image description here

enter image description here

Из этого рисунка ниже видно, что каждая ветвь получает только одно значение, после триггера HTTP вы можете добавить те же действия.

enter image description here

...