Conqueuer.Pool

Use this mixin to define a poolboy pool and supervisor.

Given you want a pool named :resolvers and will define a worker named MyApp.ResolverWorker:

defmodule MyApp.ResolversPoolSupervisor do
  use Conqueuer.Pool, name: :resolvers,
                      worker: MyApp.ResolverWorker,
                      worker_args: [arg1: 1],
                      size: 10,
                      max_overflow: 20
end

The worker_args argument is used for set up the initial state of your worker, as they are passed through to the worker’s start_link function and eventually to the init function. The Worker module implements a default init function sets the worker_args as the worker’s initial state. You may override the init function and use the options to set up a more custom initial state.

The size and max_overflow arguments are optional and if not provided the defaults are size: 1 and max_overflow: 0. For more information on these options please see the poolboy project’s documentation or this article.

Now that the :resolvers pool and supervisor is defined you will need to add it to your supervision tree.

defmodule Test do
  use Application

  def start(_type, _args) do
    import Supervisor.Spec, warn: false

    children = [
      supervisor( MyApp.ResolversPoolSupervisor, [[], [name: :ResolversPoolSupervisor]] ),
      ...
    ]

    Supervisor.start_link(children, opts)
  end
end

The name of the supervisor process is very important as it’s collaborators infer its name through convention.