juulSme / singleton

Global, supervised singleton processes for Elixir

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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.

About

Global, supervised singleton processes for Elixir

License:MIT License


Languages

Language:Elixir 100.0%