Envío
application-wide registry with handy helpers to ease dispatching
Installation
Simply add envio to your list of dependencies in mix.exs:
def deps do
[
{:envio, "~> 0.3"}
]
endUsage
Simple publisher
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 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, 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, :foo}]
def handle_envio(message, state) do
{:noreply, state} = super(message, state)
IO.inspect({message, state}, label: "PubSucked")
{:noreply, state}
end
endChangelog
0.3.0→Envio.Backendand infrastructure for backends;Slackas an example.
ToDo
-
Back pressure with
GenStagefor:dispatchkind of delivery; - Set of backends for easy delivery (slack, redis, rabbit, etc.)