Subscribes GenStage consumers to producers across Elixir Umbrella apps.
Add umbrella_stage
to your list of dependencies in mix.exs
:
Elixir >= 1.4 required
def deps do
[
{:umbrella_stage, "~> 0.1.1"}
]
end
- Configuration
use
theUmbrellaStage
in the GenStages servers. It required 2 arguments:
:type
- is the GenStage type::producer
,:producer_consumer
or:consumer
:producers
- required only for consumers and producer_consumers. It's the list of producers, the consumer (or producer_consumer) will subscribe to, in the following format:{ProducerName, [subscription_options]}
- Call
umbrella_sync_subscribe()
in the GenStageinit
This version of umbrella_stage implements just the GenStage.sync_subscribe/3
subscription.
Please check this blog post for more details.
A demo app is available on GitHub.
defmodule App1.MyConsumer do
use UmbrellaStage,
type: :consumer,
producers: [
{MyProducerConsumer, [max_demand: 10]}
]
def init() do
umbrella_sync_subscribe()
.....
end
end
defmodule App2.MyProducerConsumer do
use UmbrellaStage,
type: :producer_consumer,
producers: [
{MyProducer, [max_demand: 10]}
]
def init() do
umbrella_sync_subscribe()
.....
end
end
defmodule App3.MyProducer do
use UmbrellaStage,
type: :producer
def init() do
umbrella_sync_subscribe()
.....
end
end