Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację
Apigee X. info
Logowanie to jeden ze skutecznych sposobów na debugowanie problemów. Informacje o żądaniu interfejsu API, takie jak nagłówki, parametry formularza, parametry zapytania, zmienne dynamiczne itp., można rejestrować, aby móc się do nich później odwoływać. Informacje można rejestrować lokalnie na procesorach wiadomości (tylko Apigee Edge dla Private Cloud) lub na serwerach innych firm, takich jak Sumo Logic, Splunk czy Loggly.
Nieprawidłowy wzorzec
W poniższym kodzie obiekt httpClient w zasadzie JavaScript służy do rejestrowania danych na
serwerze Sumo Logic. Oznacza to, że proces rejestrowania odbywa się podczas przetwarzania żądania lub odpowiedzi. Takie podejście jest nieefektywne, ponieważ wydłuża czas przetwarzania, a tym samym zwiększa ogólne opóźnienia.
LogData_JS:
<!-- /antipatterns/examples/1-4.xml --> <Javascript async="false" continueOnError="false" enabled="true" timelimit="2000" name="LogData_JS"> <DisplayName>LogData_JS</DisplayName> <ResourceURL>jsc://LogData.js</ResourceURL> </Javascript>
LogData.js:
<!-- /antipatterns/examples/1-5.xml --> var sumoLogicURL = "..."; httpClient.send(sumoLogicURL); waitForComplete();
Przyczyną problemu jest wywołanie funkcji waitForComplete(), która wstrzymuje operacje wywołującego do czasu zakończenia procesu rejestrowania. Prawidłowym wzorcem jest uczynienie tego procesu asynchronicznym przez wyeliminowanie tego wywołania.
Wpływ
- Wykonanie kodu rejestrowania za pomocą zasady JavaScript zwiększa opóźnienie żądania interfejsu API.
- Jednoczesne żądania mogą obciążać zasoby procesora komunikatów, co może negatywnie wpływać na przetwarzanie innych żądań.
Sprawdzona metoda
- Użyj zasady MessageLogging, aby przesyłać lub rejestrować dane na serwerach logów lub w usługach zarządzania logami innych firm, takich jak Sumo Logic, Splunk czy Loggly.
- Największą zaletą zasady MessageLogging jest to, że można ją zdefiniować w przepływie Post Client, który jest wykonywany po wysłaniu odpowiedzi do aplikacji klienta wysyłającej żądanie.
- Zdefiniowanie tej zasady w przepływie Post Client pomaga oddzielić aktywność rejestrowania od przetwarzania żądań i odpowiedzi, co pozwala uniknąć opóźnień.
- Jeśli istnieje konkretny wymóg lub powód, aby rejestrować dane za pomocą JavaScriptu (a nie za pomocą opcji przepływu Post
Client opisanej powyżej), należy to zrobić asynchronicznie. Innymi słowy,
jeśli używasz obiektu
httpClient, musisz się upewnić, że JavaScript NIE implementuje funkcjiwaitForComplete.