Form pendaftaran terasa lambat karena satu hal: mengirim email. Pengguna menunggu server menghubungi SMTP, dan kalau SMTP-nya sedang lambat, halaman ikut menggantung. Memindahkan pengiriman ke queue menyelesaikan itu dalam beberapa baris.
Yang tidak saya sadari, saya sedang menukar satu masalah dengan masalah lain.
Ketika pengiriman berjalan langsung di dalam request, kegagalan terlihat seketika. Ketika ia berpindah ke antrean, kegagalan pindah ke tempat yang tidak dilihat siapa pun. Selama tidak ada worker yang berjalan, pekerjaan hanya menumpuk di tabel jobs, dan halaman tetap membalas "berhasil" dengan gembira.
Saya baru tahu setelah ada yang bertanya kenapa emailnya tidak masuk.
Sebelum memindahkan sesuatu ke queue, saya tanya dua hal:
Kalau jawaban pertanyaan kedua adalah "tidak ada", berarti saya belum siap memakai queue untuk pekerjaan itu.
Untuk kasus email pendaftaran, saya akhirnya tidak memakai antrean sama sekali. Pengiriman dijalankan setelah respons dikirim ke peramban, dan kegagalannya dicatat ke log tanpa menggagalkan pendaftaran. Halaman tetap cepat, dan kalau SMTP bermasalah, jejaknya ada.
Untuk pekerjaan yang memang panjang, misalnya memproses berkas besar atau menyusun laporan, antrean tetap pilihan yang benar. Syaratnya cuma satu: pastikan ada yang menjalankan worker-nya, dan pastikan kegagalannya terlihat. Antrean tanpa pemantauan bukan menghilangkan masalah, ia cuma memindahkannya ke tempat yang lebih gelap.