Antipattern: JavaScript politikasını kullanarak verileri üçüncü taraf sunuculara kaydet

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

Günlük kaydı, sorunlarda hata ayıklamanın etkili yollarından biridir. API isteğiyle ilgili başlıklar, form parametreleri, sorgu parametreleri, dinamik değişkenler gibi bilgilerin tümü daha sonra kullanılmak üzere günlüğe kaydedilebilir. Bilgiler yerel olarak Mesaj İşlemcilere (yalnızca Private Cloud için Apigee Edge) veya Sumo Logic, Splunk ya da Loggly gibi üçüncü taraf sunuculara kaydedilebilir.

Antipattern

Aşağıdaki kodda, verileri bir Sumo Logic sunucusuna kaydetmek için JavaScript politikasındaki httpClient nesnesi kullanılır. Bu, günlük kaydı işleminin aslında istek/yanıt işleme sırasında gerçekleştiği anlamına gelir. Bu yaklaşım, işleme süresini uzatarak toplam gecikmeleri artırdığından ters etki yapar.

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();

Bunun nedeni waitForComplete() çağrısıdır. Bu arama, günlük kaydı işlemi tamamlanana kadar arayanın işlemlerini askıya alır. Geçerli bir kalıp, bu çağrıyı kaldırarak bu eşzamansız yapmaktır.

Etki

  • Günlük kaydı kodunun JavaScript politikası aracılığıyla yürütülmesi, API isteğinin gecikmesini artırır.
  • Eşzamanlı istekler, Mesaj İşleyici'deki kaynakları strese sokabilir ve bunun sonucunda diğer isteklerin işlenmesini olumsuz yönde etkileyebilir.

En İyi Uygulama

  • Verileri Log sunucularına veya Sumo Logic, Splunk, Loggly vb. üçüncü taraf günlük yönetim hizmetlerine aktarmak/kaydetmek için MessageLogging politikasını kullanın.
  • Message Logging politikasının en büyük avantajı, Yanıtın istekte bulunan istemci uygulamasına gönderilmesinden sonra yürütülecek İstemci Sonrası Akışı'nda tanımlanabilmesidir.
  • Post Client (İstemci Sonrası) akışında bu politikanın tanımlanması, günlük kaydı etkinliği ile istek/yanıt işlemeyi ayırmaya yardımcı olarak gecikmelerin önlenmesine yardımcı olur.
  • JavaScript üzerinden günlük kaydı tutma gibi belirli bir gereklilik veya neden varsa (yukarıda belirtilen Post Client akış seçeneği değil) eşzamansız olarak yapılması gerekir. Diğer bir deyişle, bir httpClient nesnesi kullanıyorsanız JavaScript'in waitForComplete öğesini DEĞİLDİĞİNDEN emin olmanız gerekir.

Daha fazla bilgi