Behaviour that a message library must implement in order to comunicate with the Exchange
add_listener(key :: String.t()) :: :error | :ok
cast_event(event :: atom(), payload :: any()) :: nil | :ok
remove_listener(key :: String.t()) :: :error | :ok