Application-wide registry with handy helpers to ease dispatching.
Simply add envio
to your list of dependencies in mix.exs
:
def deps do
[
{:envio, "~> 1.0"}
]
end
Use Envio.Publisher
helper to scaffold the registry publisher. It provides
broadcast/2
helper (and brodcast/1
if the default channel is set.)
defmodule Spitter.Registry do
use Envio.Publisher, channel: :main
def spit(channel, what), do: broadcast(channel, what)
def spit(what), do: broadcast(what)
end
Simple subscriber (dispatch
)
Just register your handler anywhere in the code:
Envio.register(
{Sucker, :suck},
dispatch: %Envio.Channel{source: Spitter.Registry, name: :foo}
)
Sucker.suck/1
will be called with a payload.
PubSub subscriber (pub_sub
)
Use Envio.Subscriber
helper to scaffold the registry subscriber. Implement
handle_envio/2
for custom message handling. The default implementation
collects last 10 messages in it’s state.
defmodule PubSucker do
use Envio.Subscriber, channels: [{Spitter.Registry, :foo}]
def handle_envio(message, state) do
{:noreply, state} = super(message, state)
IO.inspect({message, state}, label: "PubSucked")
{:noreply, state}
end
end
Phoenix.PubSub subscriber (phoenix_pub_sub
)
Use manager: :phoenix_pub_sub
for distributed message broadcasting. The implementation below subscribes to "main"
channel in the distributed OTP environment and prints out each subsequent incoming message to standard output.
defmodule Pg2Sucker do
use Envio.Subscriber, channels: ["main"], manager: :phoenix_pub_sub
def handle_envio(message, state) do
{:noreply, state} = super(message, state)
IO.inspect({message, state}, label: "Received")
{:noreply, state}
end
end
The publisher this subscriber might be listening to would look like
defmodule Pg2Spitter do
use Envio.Publisher, manager: :phoenix_pub_sub, channel: "main"
def spit(channel, what), do: broadcast(channel, what)
def spit(what), do: broadcast(what)
end
1.0.0
→ Modern Elixir v1.16 update, no more features planned0.10.2
→ Accept:warning
alongside:warn
0.10.1
→ Runtime configs for backends via{:system, value}
tuples0.10.0
→Process
backend0.8.0
→Phoenix.PubSub
support (+ backend)0.5.0
→ removed a dependency fromSlack
package0.4.0
→ better docs and other enhancements0.3.0
→Envio.Backend
and infrastructure for backends;Slack
as an example.
- Back pressure with
GenStage
for:dispatch
kind of delivery; - Set of backends for easy delivery (slack, redis, rabbit, etc.)