RPC Client/Server for amqp Elixir library
Warning! POC quality!
Fuse helps reduce latency when something goes wrong with RabbitMQ or RPC server side by breaking circuit and returning immideately. Fuse can be configured via fuse_name
and fuse_opts
keys. We trying to maintain sensible default for those.
Clients can be instrumented using built-in metrics plugins. Currenly implemented
Below is ‘classic’ RPC example from RabbitMQ tutorials
rewritten using amqp_rpc:
Client:
defmodule Fibonacci do
use AMQP.RPC.Client, [exchange: "",
queue: "rpc_queue"]
def fib(n, timeout \\ @timeout) do
rpc(%{command_name: "fib",
args: n}, timeout)
end
end
Server:
defmodule FibonacciServer do
use AMQP.RPC.Server, [exchange: "",
queue: "rpc_queue",
commands: [:fib]]
## adapted from https://gist.github.com/stevedowney/2f910bd3d72678b4cf99
def fib(0), do: 0
def fib(n)
when is_number(n) and n > 0,
do: fib(n, 1, 0, 1)
def fib(_), do: [error: "positive integers only"]
def fib(n, m, _prev_fib, current_fib)
when n == m,
do: current_fib
def fib(n, m, prev_fib, current_fib),
do: fib(n, m+1, current_fib, prev_fib + current_fib)
end
Available in Hex, the package can be installed as:
Add amqp_rpc
to your list of dependencies in mix.exs
:
def deps do
[{:amqp_rpc, "~> 0.0.7"}]
end
Ensure amqp_rpc
is started before your application:
def application do
[applications: [:amqp_rpc]]
end