View Source Rambla (Rambla v1.2.6)
Interface for the message publishing through Rambla
.
Rambla
maintains connection pools with Finitomata.Pool
for each service.
The typical config for Rambla
service follows the pattern introduced by
AMQP
library:
‹service›: [
connections: [
‹connection_name›: [‹key_1›: ‹value_1›, …]
],
channels: [
‹channel_name›: [
connection: ‹connection_name›,
options: [‹key_1›: ‹value_1›, …]
]
]
]
Additional option, one might pass to the channel config, would be explicit handlers
for failures and success calls (by default the former prints the warning and retries
until the maximum count of retries reached, and then calls on_fatal/2
callback,
and the latter logs a debug message.)
channels: [
chan_1: [
connection: :conn_1,
options: [
callbacks: [
on_success: fn result -> IO.inspect(result, label: "on_success") && :ok end]
]]]]
To start pools, simply embed Rambla
into the supervision tree, it’d
start a supervisor with children for all the configured services.
The configuration of the service implies all the Rambla
’s code for it will
be compiled, but the dependency itself must be added to the deps
section
of the Mix.Project
file.
The excerpt from the Rambla.MixProject
itself follows
# optional backends
{:amqp, "~> 3.0", optional: true},
{:redix, "~> 1.0", optional: true},
{:pillar, "~> 0.39", optional: true},
{:gen_smtp, "~> 0.4 or ~> 1.0", optional: true},
{:telemetria, "~> 0.4 or ~> 1.0", optional: true},
# s3
{:ex_aws, "~> 2.1", optional: true},
{:ex_aws_s3, "~> 2.0", optional: true},
{:ex_aws_sts, "~> 2.0", optional: true},
{:hackney, "~> 1.9", optional: true},
{:sweet_xml, "~> 0.6", optional: true},
{:configparser_ex, "~> 4.0", optional: true},
Channel names are used across connections to publish messages.
Rambla.publish(:channel_1, message)
would publish the message to all channels
named channel_1
.
Summary
Functions
Returns a map %{‹service› => [‹channels›]}
Returns a specification to start this module under a supervisor.
Returns the currently active pools
Publishes the message to the target channels. The message structure depends on
the destination. For RabbitMQ
is might be whatever, for Smtp
it expects
to have to:
, subject:
and body:
fields.
Publishes the message to the destination synchronously, avoiding the pool.
Publishes the message to the destination synchronously, avoiding the pool.
Unlike publish_synch/2
, allows to specify additional options per request.
Executes any arbitrary function in the context of one of workers in the respective connection pool for the target.
Returns a list of all the configured services (connections)
Starts the supervisor with all the configured services
Starts the pools configured in the config.exs
/ releases.exs
file.
Starts the pools as specified by options (map()
or keyword()
)
Functions
Returns a map %{‹service› => [‹channels›]}
Returns a specification to start this module under a supervisor.
See Supervisor
.
Returns the currently active pools
Publishes the message to the target channels. The message structure depends on
the destination. For RabbitMQ
is might be whatever, for Smtp
it expects
to have to:
, subject:
and body:
fields.
Publishes the message to the destination synchronously, avoiding the pool.
Publishes the message to the destination synchronously, avoiding the pool.
Unlike publish_synch/2
, allows to specify additional options per request.
Executes any arbitrary function in the context of one of workers in the respective connection pool for the target.
The function would receive a pid of the connection process.
Returns a list of all the configured services (connections)
Starts the supervisor with all the configured services
Starts the pools configured in the config.exs
/ releases.exs
file.
This call is equivalent to start_pools(Application.get_env(:rambla, :pools))
.
Starts the pools as specified by options (map()
or keyword()
)