bersegosx / Natsex

Elixir client for NATS / NATS Streaming
2 stars 0 forks source link
client driver elixir nats pubsub

Natsex

Build Status Version Coverage License

Elixir client for NATS

Features

Installation

The package can be installed by adding natsex to your list of dependencies in mix.exs:

def deps do
  [
    {:natsex, "~> 0.9.1"}
  ]
end

Usage

# connects with default params, host - "localhost", port - 4222
iex(1)> {:ok, pid} = Natsex.start_link()
{:ok, #PID<0.195.0>}

# or connects on custom port with credentials
iex(1)> {:ok, pid} = Natsex.start_link(config: %{host: "localhost", port: 4567, user: "admin", pass: "12345"})
{:ok, #PID<0.195.0>}

iex(2)> Natsex.subscribe(pid, "telegram.user.notifications", self())
"13b2d0cd-9dba-43b6-bb5d-288d48346ff4"

iex(3)> flush
{:natsex_message,
 {"telegram.user.notifications", "13b2d0cd-9dba-43b6-bb5d-288d48346ff4", nil},
 "Good news, everyone!"}
:ok

# sent a message and waits a response, aka "Request-Reply"
iex(4)> Natsex.request(pid, "questions", "sup?")
{:ok, "response"}

iex(5)> Natsex.stop(pid)
:ok

TLS connection

# connects with tls
iex(1)> Natsex.start_link(config: %{tls_required: true})
{:ok, #PID<0.195.0>}

# connects with client cert
iex(1)> Natsex.start_link(config: %{tls_required: true,
                                    cert_path: Path.expand("./cert.crt"),
                                    cert_key_path: Path.expand("./client.key")})
{:ok, #PID<0.195.0>}

Benchmarking

Name ips average deviation median 99th %
parse-128 372.53 K 2.68 μs ±1421.03% 2 μs 12 μs
pub - 128 15.96 K 62.67 μs ±30.65% 59 μs 111 μs
sub-unsub-pub-16 4.45 K 224.69 μs ±47.88% 210 μs 449 μs
request/reply 3.60 K 277.94 μs ±18.10% 262 μs 448 μs

TODO