event_bus v1.6.1 EventBus
Traceable, extendable and minimalist event bus implementation for Elixir with built-in event store and event observation manager based on ETS
Link to this section Summary
Types
EventBus.Model.Event struct
Event id
Tuple of topic name and event id
Event subscriber
Subscriber configuration
Event subscriber with config
Tuple of subscriber and event reference
Tuple of subscriber and event shadow
Tuple of subscriber, topic and event id
Tuple of subscriber and list of topic patterns
Event subscriber without config
List of event subscribers
Topic name
Regex pattern to match topic name
List of topic patterns
List of topic names
Functions
Fetch an event
Fetch an event's data
Mark the event as completed for the subscriber
Mark the event as skipped for the subscriber
Send an event to all subscribers
Register a topic
Subscribe a subscriber to the event bus
Check if the given subscriber subscribed to the event bus for the given topic patterns
List the subscribers
List the subscribers for the given topic
Check if a topic registered
List all the registered topics
Unregister a topic
Unsubscribe a subscriber from the event bus
Link to this section Types
EventBus.Model.Event struct
Event id
Tuple of topic name and event id
subscriber()
subscriber() :: subscriber_without_config() | subscriber_with_config()
Event subscriber
Subscriber configuration
subscriber_with_config()
subscriber_with_config() :: {module(), subscriber_config()}
Event subscriber with config
subscriber_with_event_ref()
subscriber_with_event_ref() :: subscriber_with_event_shadow() | subscriber_with_topic_and_event_id()
Tuple of subscriber and event reference
subscriber_with_event_shadow()
subscriber_with_event_shadow() :: {subscriber(), event_shadow()}
Tuple of subscriber and event shadow
subscriber_with_topic_and_event_id()
subscriber_with_topic_and_event_id() :: {subscriber(), topic(), event_id()}
Tuple of subscriber, topic and event id
subscriber_with_topic_patterns()
subscriber_with_topic_patterns() :: {subscriber(), topic_patterns()}
Tuple of subscriber and list of topic patterns
Event subscriber without config
List of event subscribers
Topic name
Regex pattern to match topic name
List of topic patterns
List of topic names
Link to this section Functions
Fetch an event
Examples
EventBus.fetch_event({:hello_received, "123"})
%EventBus.Model.Model{}
Fetch an event's data
Examples
EventBus.fetch_event_data({:hello_received, "123"})
mark_as_completed(subscriber_with_event_ref)
mark_as_completed(subscriber_with_event_ref()) :: :ok
Mark the event as completed for the subscriber
Examples
topic = :hello_received
event_id = "124"
event_shadow = {topic, event_id}
# For regular subscribers
EventBus.mark_as_completed({MyEventSubscriber, event_shadow})
# For configurable subscribers you must pass tuple of subscriber and config
my_config = %{}
subscriber = {OtherSubscriber, my_config}
EventBus.mark_as_completed({subscriber, event_shadow})
:ok
mark_as_skipped(subscriber_with_event_ref)
mark_as_skipped(subscriber_with_event_ref()) :: :ok
Mark the event as skipped for the subscriber
Examples
EventBus.mark_as_skipped({MyEventSubscriber, {:unmatched_occurred, "124"}})
# For configurable subscribers you must pass tuple of subscriber and config
my_config = %{}
subscriber = {OtherSubscriber, my_config}
EventBus.mark_as_skipped({subscriber, {:unmatched_occurred, "124"}})
:ok
Send an event to all subscribers
Examples
event = %Event{id: 1, topic: :webhook_received,
data: %{"message" => "Hi all!"}}
EventBus.notify(event)
:ok
Register a topic
Examples
EventBus.register_topic(:demo_topic)
:ok
subscribe(subscriber_with_topic_patterns)
subscribe(subscriber_with_topic_patterns()) :: :ok
Subscribe a subscriber to the event bus
Examples
EventBus.subscribe({MyEventSubscriber, [".*"]})
:ok
# For configurable subscribers you can pass tuple of subscriber and config
my_config = %{}
EventBus.subscribe({{OtherSubscriber, my_config}, [".*"]})
:ok
subscribed?(subscriber_with_topic_patterns)
subscribed?(subscriber_with_topic_patterns()) :: boolean()
Check if the given subscriber subscribed to the event bus for the given topic patterns
Examples
EventBus.subscribe({MyEventSubscriber, [".*"]})
:ok
EventBus.subscribed?({MyEventSubscriber, [".*"]})
true
EventBus.subscribed?({MyEventSubscriber, ["some_initialized"]})
false
EventBus.subscribed?({AnothEventSubscriber, [".*"]})
false
List the subscribers
Examples
EventBus.subscribers()
[MyEventSubscriber]
# One usual and one configured subscriber with its config
EventBus.subscribers()
[MyEventSubscriber, {OtherSubscriber, %{}}]
List the subscribers for the given topic
Examples
EventBus.subscribers(:metrics_received)
[MyEventSubscriber]
# One usual and one configured subscriber with its config
EventBus.subscribers(:metrics_received)
[MyEventSubscriber, {OtherSubscriber, %{}}]
Check if a topic registered
Examples
EventBus.topic_exist?(:demo_topic)
true
List all the registered topics
Examples
EventBus.topics()
[:metrics_summed]
Unregister a topic
Examples
EventBus.unregister_topic(:demo_topic)
:ok
Unsubscribe a subscriber from the event bus
Examples
EventBus.unsubscribe(MyEventSubscriber)
:ok
# For configurable subscribers you must pass tuple of subscriber and config
my_config = %{}
EventBus.unsubscribe({OtherSubscriber, my_config})
:ok