Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: Azure Logic Apps (Consumption + Standard)
Usługa Azure Logic Apps nakłada różne limity rozmiaru zawartości komunikatu, którą operacje mogą obsługiwać w przepływach pracy aplikacji logiki. Te limity różnią się zarówno w zależności od typu zasobu aplikacji logiki, jak i środowiska, w którym jest uruchamiany przepływ pracy. Limity pomagają również zmniejszyć obciążenie wynikające z przechowywania i przetwarzania dużych komunikatów. Aby uzyskać więcej informacji na temat limitów rozmiaru komunikatów, zobacz Limity komunikatów w usłudze Azure Logic Apps.
Jeśli używasz wbudowanych akcji HTTP lub określonych akcji łącznika zarządzanego do pracy z komunikatami większymi niż domyślne limity, możesz włączyć fragmentowanie. Takie podejście dzieli duży komunikat na mniejsze komunikaty, dzięki czemu nadal można przesyłać duże pliki w określonych warunkach.
W przypadku tych wbudowanych akcji HTTP i określonych akcji łącznika zarządzanego fragmentowanie jest jedynym sposobem, w jaki usługa Azure Logic Apps może korzystać z dużych komunikatów. Podstawowa wymiana komunikatów HTTP między usługą Azure Logic Apps i innymi usługami musi używać fragmentowania lub połączenia utworzone przez łączniki zarządzane muszą obsługiwać fragmentowanie.
Uwaga / Notatka
Ze względu na zwiększone obciążenie związane z wymianą wielu komunikatów usługa Azure Logic Apps nie obsługuje fragmentowania wyzwalaczy. Ponadto usługa Azure Logic Apps implementuje fragmentowanie akcji HTTP przy użyciu własnego protokołu, zgodnie z opisem w tym artykule. Nawet jeśli witryna internetowa lub usługa internetowa obsługuje fragmentowanie, nie działają one z fragmentowaniem akcji HTTP.
Aby użyć fragmentowania akcji HTTP z witryną internetową lub usługą internetową, zaimplementuj ten sam protokół, który jest używany przez usługę Azure Logic Apps. W przeciwnym razie nie włączaj fragmentowania akcji HTTP.
Ten artykuł zawiera omówienie znaczenia dużych komunikatów, sposobu działania fragmentowania oraz sposobu konfigurowania fragmentowania obsługiwanych akcji w usłudze Azure Logic Apps.
Co sprawia, że komunikaty są "duże"?
Wiadomości są duże w zależności od usługi, która je obsługuje. Dokładny limit rozmiaru dużych komunikatów różni się w zależności od akcji usługi Azure Logic Apps i łącznika. Zarówno usługa Azure Logic Apps, jak i łączniki nie mogą bezpośrednio korzystać z dużych komunikatów bez fragmentowania.
Aby uzyskać limit rozmiaru komunikatów usługi Azure Logic Apps, zobacz Limity i konfiguracja usługi Azure Logic Apps. Aby zapoznać się z limitem rozmiaru komunikatów każdego łącznika, zobacz dokumentację łącznika.
Obsługa fragmentowanych komunikatów dla usługi Azure Logic Apps
Usługa Azure Logic Apps nie może bezpośrednio używać danych wyjściowych z fragmentowanych komunikatów, które są większe niż limit rozmiaru komunikatów. Tylko akcje, które obsługują fragmentowanie, mogą uzyskiwać dostęp do zawartości komunikatu w tych danych wyjściowych. Akcja, która obsługuje duże komunikaty, musi spełniać jeden z następujących kryteriów:
- Akcja musi natywnie obsługiwać fragmentowanie, gdy ta akcja należy do łącznika.
- Akcja musi mieć włączoną obsługę fragmentowania w konfiguracji środowiska uruchomieniowego tej akcji.
W przeciwnym razie podczas próby uzyskania dostępu do dużej zawartości danych wyjściowych wystąpi błąd środowiska uruchomieniowego.
Obsługa fragmentowanych komunikatów dla łączników
Usługi komunikujące się z usługą Azure Logic Apps mogą mieć własne limity rozmiaru komunikatów. Te limity są często mniejsze niż limit usługi Azure Logic Apps. Na przykład, jeśli łącznik obsługuje fragmentowanie, może on uznać komunikat o rozmiarze 30 MB za duży, podczas gdy usługa Azure Logic Apps nie traktuje go w ten sposób. Aby zachować zgodność z limitem tego łącznika, usługa Azure Logic Apps dzieli wszystkie komunikaty większe niż 30 MB na mniejsze fragmenty.
W przypadku łączników, które obsługują fragmentowanie, podstawowy protokół fragmentowania jest niewidoczny dla użytkowników końcowych. Nie wszystkie łączniki obsługują fragmentowanie. Łączniki, które nie obsługują go, generują błędy środowiska uruchomieniowego, gdy komunikaty przychodzące przekraczają limity rozmiaru łącznika.
W przypadku akcji, które obsługują fragmentowanie, nie można używać treści wyzwalacza, zmiennych i wyrażeń, takich jak triggerBody()?['Content']. Użycie dowolnego z tych danych wejściowych uniemożliwia wykonanie operacji fragmentowania. Zamiast tego użyj akcji Utwórz. W szczególności utwórz body pole przy użyciu akcji Redaguj , aby przechowywać dane wyjściowe z treści wyzwalacza, zmiennej, wyrażenia itd., na przykład:
"Compose": {
"inputs": {
"body": "@variables('myVar1')"
},
"runAfter": {
"Until": [
"Succeeded"
]
},
"type": "Compose"
},
Aby odwołać się do danych, w akcji fragmentowania użyj wyrażenia body('Compose'), na przykład:
"Create_file": {
"inputs": {
"body": "@body('Compose')",
"headers": {
"ReadFileMetadataFromServer": true
},
"host": {
"connection": {
"name": "@parameters('$connections')['sftpwithssh_1']['connectionId']"
}
},
"method": "post",
"path": "/datasets/default/files",
"queries": {
"folderPath": "/c:/test1/test1sub",
"name": "tt.txt",
"queryParametersSingleEncoded": true
}
},
"runAfter": {
"Compose": [
"Succeeded"
]
},
"runtimeConfiguration": {
"contentTransfer": {
"transferMode": "Chunked"
}
},
"type": "ApiConnection"
},
Konfigurowanie fragmentowania za pośrednictwem protokołu HTTP
W ogólnych scenariuszach HTTP można podzielić duże pobieranie i przesyłanie zawartości przez HTTP, aby przepływ pracy mógł wymieniać duże komunikaty z zewnętrznym punktem końcowym. Musisz fragmentować komunikaty w sposób oczekiwany przez usługę Azure Logic Apps.
Jeśli zewnętrzny punkt końcowy jest skonfigurowany do fragmentowania pobierania lub przekazywania, akcje HTTP w przepływie pracy automatycznie fragmentują duże komunikaty. W przeciwnym razie należy skonfigurować obsługę fragmentowania w punkcie końcowym. Jeśli nie jesteś właścicielem punktu końcowego lub nie kontrolujesz tego punktu końcowego, być może nie możesz skonfigurować fragmentowania.
Jeśli akcja HTTP nie ma jeszcze włączonego fragmentowania, musisz skonfigurować fragmentowanie za pomocą właściwości akcji runTimeConfiguration . Tę właściwość można skonfigurować w definicji akcji przy użyciu edytora widoku kodu zgodnie z opisem w dalszej części lub w projektancie przepływu pracy, jak opisano tutaj:
W projektancie wybierz akcję HTTP, aby otworzyć okienko informacji o akcji, a następnie wybierz pozycję Ustawienia.
W obszarze Transfer zawartości ustaw opcję Zezwalaj na fragmentowanie na Wł.
Aby dokończyć konfigurowanie fragmentacji pobierania lub wysyłania, przejdź do poniższych sekcji.
Pobieranie zawartości we fragmentach
Podczas pobierania zawartości z zewnętrznego punktu końcowego przy użyciu żądania HTTP GET wiele zewnętrznych punktów końcowych automatycznie wysyła duże komunikaty we fragmentach. To zachowanie wymaga, aby punkt końcowy obsługiwał częściowe żądania zawartości lub fragmentowane pliki do pobrania. Dlatego jeśli akcja w przepływie pracy wysyła żądanie HTTP GET w celu pobrania zawartości z zewnętrznego punktu końcowego, a punkt końcowy odpowiada kodem stanu 206 Partial Content, odpowiedź zawiera częściową zawartość.
Usługa Azure Logic Apps nie może kontrolować, czy zewnętrzny punkt końcowy obsługuje częściowe żądania zawartości. Gdy akcja żądania w przepływie pracy pobiera pierwszą odpowiedź z kodem stanu częściowej zawartości 206 , akcja ta automatycznie wysyła wiele żądań w celu pobrania całej zawartości.
Aby sprawdzić, czy zewnętrzny punkt końcowy obsługuje częściową zawartość, wyślij żądanie HTTP HEAD, które prosi o odpowiedź tylko z linią stanu i sekcją nagłówka, pomijając treść odpowiedzi. To żądanie pomaga określić, czy odpowiedź zawiera Accept-Ranges nagłówek.
Jeśli punkt końcowy obsługuje częściową zawartość jako fragmentowane pliki do pobrania, ale nie wysyła fragmentowanej zawartości, możesz zasugerować tę opcję, ustawiając Range nagłówek w żądaniu HTTP GET.
W poniższych krokach opisano proces używany przez usługę Azure Logic Apps do pobierania fragmentowanej zawartości z zewnętrznego punktu końcowego do przepływu pracy:
W przepływie pracy akcja wysyła żądanie HTTP GET do punktu końcowego.
Nagłówek żądania może opcjonalnie zawierać
Rangepole opisujące zakres bajtów na potrzeby żądania fragmentów zawartości.Punkt końcowy odpowiada
206kodem stanu i treścią komunikatu HTTP.Szczegółowe informacje o zawartości tego fragmentu są wyświetlane w nagłówku
Content-Rangeodpowiedzi. Te szczegóły obejmują informacje ułatwiające usłudze Azure Logic Apps określenie początku i końca fragmentu oraz całkowity rozmiar całej zawartości przed fragmentowaniem.Akcja automatycznie wysyła kolejne żądania HTTP GET do momentu pobrania całej zawartości.
Na przykład poniższa definicja operacji przedstawia żądanie HTTP GET, które ustawia nagłówek Range. Nagłówek sugeruje , że punkt końcowy odpowiada za pomocą fragmentowanej zawartości:
"getAction": {
"inputs": {
"headers": {
"Range": "bytes=0-1023"
},
"method": "GET",
"uri": "http://myAPIendpoint/api/downloadContent"
},
"runAfter": {},
"type": "Http"
}
Żądanie GET ustawia nagłówek Range na bytes=0-1023 w celu określenia zakresu bajtów. Jeśli punkt końcowy obsługuje żądania częściowej zawartości, punkt końcowy odpowiada fragmentem zawartości z żądanego zakresu. Na podstawie punktu końcowego dokładny format pola nagłówka Range może się różnić.
Przekazywanie zawartości we fragmentach
Aby przekazać zawartość we fragmentach z akcji HTTP, należy skonfigurować obsługę fragmentowania, ustawiając właściwość akcji runtimeConfiguration . To ustawienie zezwala akcji na uruchomienie protokołu fragmentowania.
Akcja może następnie wysłać początkowy komunikat POST lub PUT do zewnętrznego punktu końcowego. Gdy punkt końcowy odpowie sugerowanym rozmiarem fragmentu, akcja rozpoczyna się wysyłaniem żądań HTTP PATCH zawierających fragmenty danych.
W poniższych krokach opisano szczegółowy proces używany przez usługę Azure Logic Apps do przekazywania fragmentowanej zawartości z akcji w przepływie pracy do zewnętrznego punktu końcowego:
W przepływie pracy akcja wysyła początkowe żądanie HTTP POST lub PUT z pustą treścią komunikatu.
Nagłówek żądania zawiera następujące informacje o zawartości, którą aplikacja logiki chce przekazać we fragmentach:
Pole nagłówkowe żądania Wartość Typ Opis x-ms-transfer-mode Podzielone na części Sznurek Wskazuje, że zawartość jest przesyłana we fragmentach x-ms-content-length < długość zawartości> Integer Cały rozmiar zawartości w bajtach przed fragmentowaniem Punkt końcowy odpowiada kodem
200stanu powodzenia i następującymi informacjami:Pole nagłówkowe odpowiedzi punktu końcowego Typ Wymagane Opis Lokalizacja Sznurek Tak Lokalizacja adresu URL, w której mają być wysyłane komunikaty HTTP PATCH x-ms-chunk-size Integer Nie. Sugerowany rozmiar fragmentu w bajtach Akcja przepływu pracy tworzy i wysyła kolejne komunikaty HTTP PATCH z następującymi informacjami:
Fragment zawartości oparty na rozmiarze x-ms-chunk-size lub wewnętrznie obliczonym rozmiarze do momentu, gdy cała zawartość o łącznej długości x-ms-content-length zostanie przesłana sekwencyjnie.
Informacje nagłówka wysyłane w każdej wiadomości PATCH dotyczą następującego bloku zawartości:
Pole nagłówkowe żądania Wartość Typ Opis Zakres zawartości < zakres> Sznurek Zakres bajtów dla bieżącego fragmentu zawartości, w tym wartość początkowa, wartość końcowa i całkowity rozmiar zawartości, na przykład: bytes=0-1023/10100Typ zawartości < typ zawartości> Sznurek Typ fragmentowanej zawartości Długość zawartości < długość zawartości> Sznurek Długość rozmiaru w bajtach bieżącego fragmentu
Po każdym żądaniu PATCH endpoint potwierdza odbiór każdego fragmentu, odpowiadając kodem statusu
200i następującymi nagłówkami odpowiedzi:Pole nagłówkowe odpowiedzi punktu końcowego Typ Wymagane Opis Range Sznurek Tak Zakres bajtów zawartości odebranych przez punkt końcowy, na przykład: bytes=0-1023x-ms-chunk-size Integer Nie. Sugerowany rozmiar fragmentu w bajtach
Na przykład poniższa definicja akcji przedstawia żądanie HTTP POST dotyczące przekazywania fragmentowanej zawartości do punktu końcowego. W właściwości runTimeConfiguration akcji, właściwość contentTransfer ustawia wartość transferMode na chunked.
"postAction": {
"runtimeConfiguration": {
"contentTransfer": {
"transferMode": "chunked"
}
},
"inputs": {
"method": "POST",
"uri": "http://myAPIendpoint/api/action",
"body": "@body('getAction')"
},
"runAfter": {
"getAction": ["Succeeded"]
},
"type": "Http"
}