Gnat.ConnectionSupervisor (gnat v1.18.1)

View Source

A process that can supervise a named connection for you

If you would like to supervise a Gnat connection and have it automatically re-connect in case of failure you can use this module in your supervision tree. It takes a map with the following data:

gnat_supervisor_settings = %{
  name: :gnat, # (required) the registered named you want to give the Gnat connection
  backoff_period: 4_000, # number of milliseconds to wait between consecutive reconnect attempts (default: 2_000)
  connection_settings: [
    %{host: '10.0.0.100', port: 4222},
    %{host: '10.0.0.101', port: 4222},
  ]
}

The connection settings can specify all of the same values that you pass to Gnat.start_link/1. Each time a connection is attempted we will use one of the provided connection settings to open the connection. This is a simplistic way of load balancing your connections across a cluster of nats nodes and allowing failover to other nodes in the cluster if one goes down.

Credentials are redacted from connection configuration logs and formatted OTP status and crash reports. The raw debugging limitations described in Gnat.start_link/2 also apply to this process.

To use this in your supervision tree add an entry like this:

import Supervisor.Spec
worker(Gnat.ConnectionSupervisor, [gnat_supervisor_settings, [name: :my_connection_supervisor]])

The second argument is used as GenServer options so you can give the supervisor a registered name as well if you like. Now in the rest of your code you can call things like:

:ok = Gnat.pub(:gnat, "subject", "message")

And it will use your supervised connection. If the connection is down when you call that function (or dies during that function) it will raise an error.

Summary

Functions

Returns a specification to start this module under a supervisor.

Functions

child_spec(init_arg)

Returns a specification to start this module under a supervisor.

See Supervisor.

start_link(settings, options \\ [])

@spec start_link(
  map(),
  keyword()
) :: GenServer.on_start()