Donc, disons que je veux envoyer un tas d'emails ou recréer un plan du site ou quoi que ce soit toutes les 4 heures, comment pourrais-je le faire à Phoenix ou simplement avec Elixir?
Il existe une alternative simple qui ne nécessite aucune dépendance externe:
defmodule MyApp.Periodically do
use GenServer
def start_link do
GenServer.start_link(__MODULE__, %{})
end
def init(state) do
schedule_work() # Schedule work to be performed at some point
{:ok, state}
end
def handle_info(:work, state) do
# Do the work you desire here
schedule_work() # Reschedule once more
{:noreply, state}
end
defp schedule_work() do
Process.send_after(self(), :work, 2 * 60 * 60 * 1000) # In 2 hours
end
end
Maintenant dans votre arbre de supervision:
worker(MyApp.Periodically, [])
Quantum vous permet de créer, rechercher et supprimer des travaux au moment de l'exécution.
De plus, vous pouvez passer des arguments à la fonction task lors de la création d'un cronjob et même modifier le fuseau horaire si vous n'êtes pas satisfait de l'UTC:
https://github.com/c-rack/quantum-elixir
Si votre application s'exécute sous la forme d'instances isolées multiples (par exemple Heroku), il existe des processeurs de travaux soutenus par Redis, qui prennent également en charge la planification des tâches:
Exq: https://github.com/akira/exq
Vous pouvez utiliser erlcron pour cela. Vous l'utilisez comme
job = {{:weekly, :thu, {2, :am}},
{:io, :fwrite, ["It's 2 Thursday morning~n"]}}
:erlcron.cron(job)
Un job
est un tuple à 2 éléments. Le premier élément est un tuple qui représente la planification du travail et le second élément est la fonction ou un MFA (module, fonction, élément). Dans l'exemple ci-dessus, nous exécutons :io.fwrite("It's 2 Thursday morning")
chaque jeudi à 2 heures du matin.
J'espère que cela pourra aider!
J'ai utilisé la bibliothèque Quantum Quantum- Elixir .
Suivez les instructions ci-dessous.
#your_app/mix.exs
defp deps do
[{:quantum, ">= 1.9.1"},
#rest code
end
#your_app/mix.exs
def application do
[mod: {AppName, []},
applications: [:quantum,
#rest code
]]
end
#your_app/config/dev.exs
config :quantum, :your_app, cron: [
# Every minute
"* * * * *": fn -> IO.puts("Hello QUANTUM!") end
]
Tous ensemble. Démarrez le serveur en exécutant la commande ci-dessous.
iex -S mix phoenix.server
Quantum est génial, nous l’utilisons au travail en remplacement de cron avec une interface frontale phénix et nous ajoutons également des emplois en temps réel , ce qui est très soigné.
En plus d'utiliser Process.send_after
, vous pouvez également utiliser : timer.apply_interval .