Customized queue and retry mechanism with Google Cloud PubSub using Go

ajeng tya meiranti
2 min readDec 28, 2021

--

Pernahkah kalian mempunyai 2 microservice, mereka saling berkomunikasi menggunakan RestAPI, namun karna error infrastructure (entah down atau traffic sedang tinggi) jadi gagal hit dan akibatnya data antar 2 service tersebut tidak sinkron.

Lalu gimana solusinya?

Yuk baca sampai habis pengalaman saya memperbaiki kondisi tersebut.

Pertama, kita perlu buat sebuah sistem yg berfungsi untuk antrian & retry. Si sistem ini tugasnya hanya menampung request yang masuk dari sourceSystem menjadi sebuah antrian. Kemudian antrian request yg paling depan, satu persatu di consume dan di hit ke destinationSystem.

Tapi ternyata sebuah message dari sistemAntrianRetry gagal memproses request ke destinationSource gimana dong?

Setiap request yg gagal hit, akan kita simpan di antrian paling belakang , tujuan nya agar terjadi proses retry. Sedangkan request yang berhasil hit ke destinationSource, maka dihapus dari antrian.

Wah bisa begitu memangnya? Pakai apa?

Saya pakai Google Cloud PubSub dengan meng-utilize Ack & nAck.

Berikut gambaran sistem queue & retry yang saya terapkan di Comm — Warung Pintar

Issue yang sudah pernah saya alami selama di production yaitu Subscriber/Consumernya tidak jalan sehingga unACKed message menumpuk membuat grafiknya naik seperti gambar berikut, solusinya mencari error log lalu fix, jika tidak ketemu, maka kamu hanya perlu me-Restart sistemAntrianRetry.

Grafik unACKed message yang menumpuk

Sekian cerita pengalaman saya, inyaallah akan jabarkan detailnya menjadi 3 bagian pada story berikutnya yaitu:

  1. Ordering
  2. Re-deliver
  3. Implementasi di Go

semoga bermanfaat..

--

--