Global, supervised singleton processes for Elixir
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
config
lib
test
.gitignore
LICENSE
README.md
mix.exs

README.md

Singleton

Convenience wrapper library around Erlang's global module to ensure a single instance of a process is kept running on a cluster of nodes.

Installation

The package can be installed as:

  1. Add singleton to your list of dependencies in mix.exs:
```elixir
def deps do
  [{:singleton, "~> 1.0.0"}]
end
```
  1. Ensure singleton is started before your application:
```elixir
def application do
  [applications: [:singleton]]
end
```

Usage

Use Singleton.start_child/3 to start a unique GenServer process.

Singleton.start_child(MyServer, [1], {:myserver, 1})

Execute this command on all nodes. The MyServer GenServer is now globally registered under the name {:global, {:myserver, 1}}.

As soon as you connect nodes together, you'll see logger messages like:

04:56:29.003 [info]  global: Name conflict terminating {MyServer, #PID<12501.68.0>}

When you now stop (or disconnect) the node on which the singleton process runs, you'll see it get started on one of the other nodes.