Current section
Files
Jump to
Current section
Files
lib/opq.ex
defmodule OPQ do
@moduledoc """
A simple, in-memory queue with pooling in Elixir.
"""
alias OPQ.{Options, Feeder, WorkerSupervisor}
def init(opts \\ []) do
opts
|> Options.assign_defaults
|> start_links
end
def enqueue(feeder, event) do
GenStage.call(feeder, {:enqueue, event})
end
def info(feeder) do
GenStage.call(feeder, :info)
end
defp start_links(opts) do
{:ok, feeder} = Feeder.start_link(opts[:name])
opts = Keyword.merge(opts, [name: feeder])
{:ok, _} = WorkerSupervisor.start_link(opts)
{:ok, feeder}
end
end