ADF Channel Sender Connector
View SourceThis package provides an elixir connector to the API exposed by Channel-Sender.
Installation
If available in Hex, the package can be installed
by adding adf_sender_connector
to your list of dependencies in mix.exs
:
def deps do
[
{:adf_sender_connector, "~> 0.4.0"}
]
end
Usage
Configuration
The configuration is done in the config.exs
file of your application. The following configuration options are available:
config :adf_sender_connector,
base_path: "http://sender.server:8081"
Also, Declare this child spec in your application supervisor:
children = [
AdfSenderConnector.http_client_spec()
]
Registering a channel
{:ok, response} = AdfSenderConnector.channel_registration("app_ref", "user_ref")
Args:
- Application reference, a binary identifier of the application for which a channel is being registered.
- User reference, a binary identifier of the user for whom the channel is being registered.
The registering channel response is a Map
containing the channel reference and
a secret. This data is needed in the frond end of your application, to actually
create a tcp connection with the sender and authenticate it.
Response example:
{:ok, %{"channel_ref" => "channel.xxx1", "channel_secret" => "channel.s3crt.xyz"}}
Closing a channel
{:ok, response} = AdfSenderConnector.channel_close("channel.xxx1")
Args:
- channel reference: a binary identifier of the previously registered channel.
Response example:
{:ok, %{"result" => "Ok"}}
Requesting Message Delivery
You can request Channel sender
to deliver a message via a channel previously
registered.
You can either use the route_message/5
function:
channel_ref
: The channel reference (or ID) obtained from the registration process.message_id
: The message unique ID.correlation_id
: The message correlation ID (optional).data
: The data or payload you would like to deliver.event_name
: The event name, wich will act as a routing key.
Example:
alias AdfSenderConnector.Message
{:ok, response} = AdfSenderConnector.route_message(
"channel.xxx1", "custom.message.id", "custom.correlation.id",
%{"hello" => "world"}, "event.name")
Or use the route_message/1
function:
message
: A Message struct.
Example:
alias AdfSenderConnector.Message
# You can use the Message struct and define all of its properties.
message = Message.new("channel.xxx1", "custom.message.id",
"custom.correlation.id", %{"hello" => "world"}, "event.name")
{:ok, response} = AdfSenderConnector.route_message(message)
Or use the route_batch/1
function:
messages
: A list of Message structs.
alias AdfSenderConnector.Message
# You can use the Message struct and define all of its properties.
messages = [
Message.new("channel.xxx1", "message.id.1", "custom.correlation.id", "hello", "event.name"),
Message.new("channel.xxx1", "message.id.2", "custom.correlation.id", "world", "event.name"),
... up to 10 messages ...
]
{:ok, response} = AdfSenderConnector.route_batch(messages)
- You can send up to 10 messages in batch mode.
- Messages will be validated for required fields
- Any message to fail the validation will be excluded from the batch.