Lewati ke konten utama

Alur Kerja

Startup​

  1. NestJS membuat WorkerCommonAppModule dan koneksi PostgreSQL, Redis, serta NATS sesuai environment.
  2. KvBootstrapService memanggil syncAllKvOnStartup().
  3. Jika Redis nonaktif, bootstrap cache dilewati dan startup barrier tetap dibuka.
  4. Jika Redis aktif, worker mencoba membersihkan semua key config.* dan global:config.
  5. Worker membaca konfigurasi tabel published yang masih aktif dan tercatat di directus_collections.
  6. Untuk setiap konfigurasi, worker menyimpan metadata kv_cache_table, menjalankan query sumber, menyimpan tiap row, lalu mengganti index tabel.
  7. Setelah seluruh tabel selesai, startup barrier dibuka.
  8. Komponen realtime membuat subscription, lalu KvCacheSyncService menerbitkan snapshot config.sync.init jika Redis dan NATS aktif.

Purge yang gagal hanya menghasilkan warning; bootstrap tetap mencoba mengisi ulang cache.

Perubahan row sumber​

Consumer item menggunakan manual explicit ack. Jika pemrosesan gagal, message di-nak selama 10 detik dan dapat dikirim ulang hingga MAX_REDELIVERY = 3.

Perubahan registrasi kv_cache_table​

  1. KvCacheTableService menerima event pgcdc.public.kv_cache_table.
  2. Metadata terbaru ditulis ke cache kv_cache_table.
  3. Untuk create/update aktif, worker melakukan full sync tabel terkait.
  4. Untuk update yang memiliki date_deleted, worker menghapus seluruh cache tabel.
  5. Daftar subscription tabel dihitung ulang dari cache kv_cache_table.
  6. Subscription baru dibuat; subscription yang tidak lagi terdaftar dihentikan dan durable consumer-nya dihapus.
  7. Message di-ack.

Pada catch path consumer metadata, error dicatat lalu message tetap di-ack sehingga tidak ada retry dari consumer ini.

Full sync satu tabel​

  1. Ambil metadata query_source dan cache_name.
  2. Jalankan query penuh.
  3. Upsert semua row yang memiliki id.
  4. Bandingkan ID lama dengan hasil baru dan hapus orphan.
  5. Ganti Redis set config.<cache>.index secara authoritative.
  6. Publish event type: 'table' ke config.sync.changed.

Shutdown​

Ketiga service realtime memanggil drain pada koneksi NATS saat module dihentikan. KvCacheTableItemService juga menghentikan subscription tabel lokal terlebih dahulu.