RaRegistry (ra_registry v0.1.2)
View SourceA distributed registry for Elixir GenServers using Ra (RabbitMQ's Raft implementation).
RaRegistry provides similar functionality to Elixir's built-in Registry module, but with distributed consensus via Ra, making it suitable for distributed applications across multiple nodes.
It supports both :unique and :duplicate registration modes.
Usage
# Register a process with a unique key
RaRegistry.register(:my_registry, "unique_key", :some_value)
# Look up a process by key
RaRegistry.lookup(:my_registry, "unique_key")
# Register with a duplicate key
RaRegistry.register(:my_duplicate_registry, "shared_key", :value1)
RaRegistry.register(:my_duplicate_registry, "shared_key", :value2)
# Look up all processes with the duplicate key
RaRegistry.lookup(:my_duplicate_registry, "shared_key")Via Registration
You can also use RaRegistry as a process registry with GenServer and other OTP processes
by using the :via tuple:
# Start a GenServer with RaRegistry
name = {:via, RaRegistry, {MyRegistry, "my_server"}}
{:ok, pid} = GenServer.start_link(MyServer, arg, name: name)
# Call the server using the same via tuple
GenServer.call(name, :some_request)
Summary
Functions
See start_link/2 for options.
Returns the number of processes registered under the given key.
Returns the registry key type, either :unique or :duplicate.
Looks up the given key in the registry and returns the associated processes.
Registers the given process under the given key in the registry. If no pid is provided, registers the current process.
Implementation for the :via registration mechanism.
Registers the current process under the given key in the registry name.
Returns :yes if registration succeeds, :no otherwise.
Implementation for the :via registration mechanism.
Sends a message to the process registered under the given key in registry.
Starts a new registry with the given name and options.
Unregisters the current process for the given key in the registry.
Implementation for the :via registration mechanism.
Unregisters the given key from the registry name.
Updates the value associated with the key for the current process.
Implementation for the :via registration mechanism.
Returns the pid associated with the given key in the registry name.
Returns pid if successful, :undefined otherwise.
Functions
See start_link/2 for options.
Returns the number of processes registered under the given key.
Examples
RaRegistry.count(MyRegistry, "key")
Returns the registry key type, either :unique or :duplicate.
Looks up the given key in the registry and returns the associated processes.
Examples
RaRegistry.lookup(MyRegistry, "key")
Registers the given process under the given key in the registry. If no pid is provided, registers the current process.
Examples
RaRegistry.register(MyRegistry, "key", :value)
RaRegistry.register(MyRegistry, "key", :value, other_pid)
Implementation for the :via registration mechanism.
Registers the current process under the given key in the registry name.
Returns :yes if registration succeeds, :no otherwise.
Implementation for the :via registration mechanism.
Sends a message to the process registered under the given key in registry.
Starts a new registry with the given name and options.
Options
:keys- The kind of keys in this registry. Can be either:uniqueor:duplicate(required).:name- A local or global name for the registry (required).
Examples
RaRegistry.start_link(keys: :unique, name: MyRegistry)
RaRegistry.start_link(keys: :duplicate, name: {MyRegistry, self()})
Unregisters the current process for the given key in the registry.
Examples
RaRegistry.unregister(MyRegistry, "key")
Implementation for the :via registration mechanism.
Unregisters the given key from the registry name.
Updates the value associated with the key for the current process.
Examples
RaRegistry.update_value(MyRegistry, "key", fn value -> value + 1 end)
Implementation for the :via registration mechanism.
Returns the pid associated with the given key in the registry name.
Returns pid if successful, :undefined otherwise.