Elixir MOM v0.5.3 MOM
Message Oriented Middleware
Implements basic MOM to allow Message passing between the users. It is used mainly as Request-Reply (RPC).
Example of use:
iex> alias MOM.{Channel, Tap, Message}
iex> {:ok, ch} = Channel.Broadcast.start_link
iex> Tap.tap(ch,"tap test")
iex> {:ok, ag} = Agent.start_link(fn -> nil end ) # a singleton with value nil, will be updated
iex> sub_id = Channel.subscribe(ch, fn _ -> Agent.update(ag, fn _ -> :updated end) end)
iex> Agent.get(ag, &(&1))
nil
iex> Channel.send(ch, %Message{})
iex> :timer.sleep(100) # Bad, I know, but send is asynchronous.
iex> Agent.get(ag, &(&1))
:updated
iex> Agent.update(ag, fn _ -> nil end)
iex> Channel.unsubscribe(ch, sub_id) # unsubscribe, should not update
iex> Channel.send(ch, %Message{})
iex> Agent.get(ag, &(&1))
nil
Summary
Functions
Called when an application is started
Functions
Called when an application is started.
This function is called when an application is started using
Application.start/2
(and functions on top of that, such as
Application.ensure_started/2
). This function should start the top-level
process of the application (which should be the top supervisor of the
application’s supervision tree if the application follows the OTP design
principles around supervision).
start_type
defines how the application is started:
:normal
- used if the startup is a normal startup or if the application is distributed and is started on the current node because of a failover from another node and the application specification key:start_phases
is:undefined
.{:takeover, node}
- used if the application is distributed and is started on the current node because of a failover on the nodenode
.{:failover, node}
- used if the application is distributed and is started on the current node because of a failover on nodenode
, and the application specification key:start_phases
is not:undefined
.
start_args
are the arguments passed to the application in the :mod
specification key (e.g., mod: {MyApp, [:my_args]}
).
This function should either return {:ok, pid}
or {:ok, pid, state}
if
startup is successful. pid
should be the PID of the top supervisor. state
can be an arbitrary term, and if omitted will default to []
; if the
application is later stopped, state
is passed to the stop/1
callback (see
the documentation for the c:stop/1
callback for more information).
use Application
provides no default implementation for the start/2
callback.
Callback implementation for Application.start/2
.