Jadi katakanlah saya ingin mengirim banyak email atau membuat ulang sitemap atau apa pun setiap 4 jam, bagaimana saya melakukannya di Phoenix atau hanya dengan Elixir?
elixir
phoenix-framework
NoDisplayName
sumber
sumber
Process.send_after
ke fungsinya sendiri sehingga fungsinya dapat dipanggil dari keduanyainit
danhandle_info
?:timer.send_interval
baik-baik saja tetapi perlu diingat bahwa interval akan konstan. Jadi bayangkan Anda ingin melakukan sesuatu setiap menit dan, di masa depan, pekerjaan itu sendiri membutuhkan lebih dari satu menit. Dalam kasus seperti itu, Anda akan bekerja sepanjang waktu dan antrian pesan Anda akan menjadi tidak terbatas. Solusi di atas akan selalu menunggu periode yang diberikan setelah pekerjaan selesai.Quantum memungkinkan Anda membuat, menemukan, dan menghapus pekerjaan saat runtime.
Selain itu, Anda dapat meneruskan argumen ke fungsi tugas saat membuat tugas cronjob, dan bahkan memodifikasi zona waktu jika Anda tidak puas dengan UTC.
Jika aplikasi Anda berjalan sebagai beberapa instance yang terisolasi (mis. Heroku), ada pemroses pekerjaan yang didukung oleh PostgreSQL atau Redis, yang juga mendukung penjadwalan tugas:
Oban: https://github.com/sorentwo/oban
Exq: https://github.com/akira/exq
Toniq: https://github.com/joakimk/toniq
Verk: https://github.com/edgurgel/verk
sumber
Anda dapat menggunakan erlcron untuk itu. Anda menggunakannya seperti
A
job
adalah tuple 2 elemen. Elemen pertama adalah tupel yang mewakili jadwal untuk pekerjaan dan elemen kedua adalah fungsi atau MFA (Modul, Fungsi, Arity). Dalam contoh di atas, kita jalankan:io.fwrite("It's 2 Thursday morning")
setiap 2 Kamis.Semoga itu bisa membantu!
sumber
Saya menggunakan perpustakaan Quantum Quantum- Elixir .
Ikuti instruksi di bawah ini.
Siap. Mulai server dengan menjalankan perintah di bawah ini.
sumber
Saya menemukan
:timer.send_interval/2
sedikit lebih ergonomis untuk digunakan denganGenServer
dariProcess.send_after/4
(digunakan dalam jawaban yang diterima ).Alih-alih harus menjadwal ulang notifikasi Anda setiap kali Anda menanganinya,
:timer.send_interval/2
tentukan interval di mana Anda menerima pesan tanpa henti — tidak perlu terus meneleponschedule_work()
seperti yang digunakan jawaban yang diterima.Setiap 1000 ms (yaitu, satu detik),
IntervalServer.handle_info/2
akan dipanggil, cetak saat inicount
, dan perbarui status GenServer (count + 1
), memberikan Anda output seperti:sumber
Selain untuk digunakan
Process.send_after
, Anda juga dapat menggunakan : timer.apply_interval .sumber
Quantum hebat, kami menggunakannya di tempat kerja sebagai pengganti cron dengan front-end phoenix dan kami juga menambahkan pekerjaan secara real-time yang sangat rapi.
sumber