ADF Channel Sender Connector

View Source

This 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.