Pengulang Request API (auto-retry
)
Plugin auto-retry menyediakan sumber daya yang diperlukan untuk menangani pembatasan flood (flood limits), yaitu sebuah kesalahan dengan kode 429. Ia bisa diterapkan ke semua bot selama pengoperasian normal, terutama saat proses penyiaran berlangsung.
Plugin ini merupakan sebuah API transformer function. Artinya, ia dapat mencegat dan memodifikasi HTTP request yang keluar secara dinamis. Lebih tepatnya, plugin ini akan secara otomatis mendeteksi jika suatu API request gagal dilakukan dengan membawa value retry
, misal dikarenakan rate limit. Ia akan menangkap error tersebut, lalu menunggu beberapa saat, kemudian mengirim request tersebut kembali.
Selain menangani pembatasan flood, plugin ini juga akan mencoba mengirim kembali request yang gagal terkirim karena kesalahan server internal, misalnya kesalahan dengan kode 500 atau lebih. Kesalahan jaringan — yang melempar sebuah error Http
— juga akan memicu plugin untuk melakukan pengulangan. Mencoba mengulang kembali request merupakan satu-satunya strategi yang masuk akal untuk menangani kedua jenis kesalahan tersebut. Karena keduanya tidak menyediakan nilai retry
, plugin akan menambah durasi tunggu secara eksponensial yang dimulai dari tiga detik hingga maksimal satu jam.
Penginstalan
Kamu bisa menginstal plugin ini di object bot
:
import { autoRetry } from "@grammyjs/auto-retry";
// Pasang plugin-nya
bot.api.config.use(autoRetry());
2
3
4
const { autoRetry } = require("@grammyjs/auto-retry");
// Pasang plugin-nya
bot.api.config.use(autoRetry());
2
3
4
import { autoRetry } from "https://deno.land/x/grammy_auto_retry@v2.0.2/mod.ts";
// Pasang plugin-nya
bot.api.config.use(autoRetry());
2
3
4
Sekarang, anggaplah kamu sedang memanggil send
, lalu terkena rate limit, maka ia akan tampak seperti sebuah request yang diproses dengan sangat lama. Di balik layar, beberapa HTTP request sedang dilakukan dengan jeda waktu yang sesuai—berdasarkan durasi flood limit—di antara kedua request. Oleh sebab itu, durasi pemrosesan terasa lama karena adanya jeda waktu tersebut.
Konfigurasi
Kamu bisa meneruskan sebuah object opsi yang menentukan jumlah maksimal pengulangan (max
) ataupun ambang batas atas waktu tunggu (max
).
Membatasi Pengulangan
Segera setelah jumlah maksimal pengulangan terlampaui, request-request berikutnya yang mengalami error tidak akan diulang kembali. Object error tersebut akan tetap diteruskan yang kemudian menghasilkan sebuah Grammy
.
Hal yang sama juga berlaku ketika request gagal dijalankan dengan retry
lebih besar dari nilai max
yang telah ditentukan. Request tersebut akan digagalkan saat itu juga.
autoRetry({
maxRetryAttempts: 1, // hanya mengulangi sekali
maxDelaySeconds: 5, // langsung gagalkan jika kita harus menunggu lebih dari 5 detik
});
2
3
4
Melempar Kembali Kesalahan Server Internal
Kamu bisa memanfaatkan rethrow
untuk tidak menangani kesalahan server internal seperti yang telah dijelaskan sebelumnya. Object error dari Telegram akan langsung diteruskan, yang kemudian akan menggagalkan request terkait dengan sebuah error Grammy
.
autoRetry({
rethrowInternalServerErrors: true, // jangan tangani kesalahan server internal
});
2
3
Melempar Kembali Kesalahan Jaringan
Kamu bisa memanfaatkan rethrow
untuk tidak menangani kesalahan jaringan seperti yang telah dijelaskan sebelumnya. Jika diaktifkan, instance error Http
yang dilempar akan langsung diteruskan, yang kemudian akan menggagalkan request terkait.
autoRetry({
rethrowHttpErrors: true, // jangan tangani kesalahan jaringan
});
2
3