CommandedHordeRegistry

Process registration and distribution via Horde

In order to use this, you will need to update the following config values:

  config :commanded,
    registry: Commanded.Registration.HordeRegistry,
    aggregate_supervisor_mfa:
      {Horde.Supervisor, :start_link,
       [[name: Commanded.Aggregates.Supervisor, strategy: :one_for_one]]}

You will also need to join the Supervisors together (connecting them via Distributed Erlang is not enough) via Horde.Cluster as documented. Starting a Commanded.Registration.HordeRegistry.Linker in your supervision tree will accomplish this, and has the added benefit of continually checking the cluster for new members and joining them.

Example Usage

To correctly handle dynamic cluster membership or node down events, you will need to start a Commanded.Registration.HordeRegistry.Linker process per a Horde.Supervisor or Horde.Registry.


defmodule ExampleCommandedApp.EventHandlerSupervisor do
  use Horde.Supervisor
  
  def init(_) do
    cluster_members = Commanded.Registration.HordeRegistry.get_cluster_members(__MODULE__)
    opts = [members: cluster_members, distribution_strategy: Horde.UniformDistribution]
    {:ok, opts}
  end
end


defmodule ExampleCommandedApp do

  use Application

  def start(_, _) do
    children = [
      {Commanded.Registration.HordeRegistry.Linker, [horde_name: Commanded.Registration.HordeRegistry]},
      ExampleCommandedApp.EventHandlerSupervisor,
      {Commanded.Registration.HordeRegistry.Linker, [horde_name: ExampleCommandedApp.EventHandlerSupervisor]},
    ]
  end

end

Installation

If available in Hex, the package can be installed by adding commanded_horde_registry to your list of dependencies in mix.exs:

def deps do
  [
    {:commanded_horde_registry, "~> 0.4.0"}
  ]
end

Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/commanded_horde_registry.

Development Status

Commanded and Horde have released updates so this is ready for testing. Once I’m confident it works I’ll push a 1.0 release