Getting Started View Source
Intro
Rambla
provides the ability to publish messages to several different destinations. Destinations are supported via backends. The respective backend must be explicitly included into the list of extra applications of target application.
For each of the configured destinations, the pool of workers to talk to it is maintained. Each destination should be configured separately; the preferred way would be to use config.exs
for local development and releases.exs
for releases.
Configuration
The configuration is the keyword list with keys specifying backends and values—their initialization properties. Properties contain pool options, name and type of the worker, and parameters to be passed as is to the underlying backend engine.
Starting Pools
Upon target application start, Rambla.start_pools/0
function should be called to start pools. If providing a configuration through the file is not an option, it might be passed as is to the call to Rambla.start_pools/1
. In this case, the static configuration from config files would be discarded.
Configuration Example
Most parameters in the options have reasonable default values :local
for :type
and backend module name for worker name. Here is the full example, with all the backend on, and options set.
config :rambla, :pools,
redis: [
params: [
host: System.get_env("REDIS_HOST", "127.0.0.1"),
port: String.to_integer(System.get_env("REDIS_PORT", "6379")),
password: System.get_env("REDIS_PASSWORD", ""),
database: 0
]
],
amqp: [
options: [size: 5, max_overflow: 300],
params: [
host: System.get_env("RABBITMQ_HOST", "127.0.0.1"),
port: String.to_integer(System.get_env("RABBITMQ_PORT", "5672")),
username: System.get_env("RABBITMQ_USERNAME", "guest"),
password: System.get_env("RABBITMQ_PASSWORD", "guest")
virtual_host: System.get_env("RABBITMQ_VHOST", "/"),
x_message_ttl: "4000"
]
],
http: [
options: [size: 25],
params: [
host: System.get_env("RAMBLA_HTTP_HOST", "127.0.0.1"),
port: String.to_integer(System.get_env("RAMBLA_HTTP_PORT", "80"))
]
],
smtp: [
options: [max_overflow: 10],
params: [
relay: System.get_env("RAMBLA_SMTP_RELAY", "smtp.gmail.com"),
username: System.get_env("RAMBLA_SMTP_USERNAME"),
password: System.get_env("RAMBLA_SMTP_PASSWORD"),
auth: :always,
ssl: true,
hostname: System.get_env("RAMBLA_SMTP_HOSTNAME"),
retries: 3,
from: %{"Aleksei Matiushkin" => "aleksei@example.com"}
]
]
Publishing
Publishing to the destination is as easy, as calling Rambla.html#publish/3
passing the destination (e. g. Rambla.Amqp
,) message and optional configuration parameters.
The following would publish the message to previously configured AMQP
connection:
Rambla.publish(Rambla.Amqp, %{foo: 42, bar: :baz}, exchange: "barfoo")