Broadway.Producer.prepare_for_start
prepare_for_start
, go back to Broadway.Producer module for more information.
Specs
prepare_for_start(module :: atom(), options :: keyword()) :: {[child_spec], updated_options :: keyword()} when child_spec: :supervisor.child_spec() | {module(), any()} | module()
Invoked once by Broadway during Broadway.start_link/2
.
The goal of this callback is to manipulate the general topology options,
if necessary at all, and introduce any new child specs that will be
started before the producers supervisor in Broadwday's supervision tree.
Broadway's supervision tree is a rest_for_one
supervisor (see the documentation
for Supervisor
), which means that if the children returned from this callback
crash they will bring down the rest of the pipeline before being restarted.
This callback is guaranteed to be invoked inside the Broadway main process.
module
is the Broadway module passed as the first argument to
Broadway.start_link/2
. options
is all of Broadway topology options passed
as the second argument to Broadway.start_link/2
.
The return value of this callback is a tuple {child_specs, options}
. child_specs
is the list of child specs to be started under Broadway's supervision tree.
updated_options
is a potentially-updated list of Broadway options
that will be used instead of the ones passed to Broadway.start_link/2
. This can be
used to modify the characteristics of the Broadway topology to accommodated
for the children started here.
Examples
defmodule MyProducer do
@behaviour Broadway.Producer
# other callbacks...
@impl true
def prepare_for_start(_module, broadway_options) do
children = [
{DynamicSupervisor, strategy: :one_for_one, name: MyApp.DynamicSupervisor}
]
{children, broadway_options}
end
end