A traceable, extendable, and minimalist event bus implementation for Elixir with built-in event store and watcher based on ETS.
EventBus is a lightweight event-driven architecture library for Elixir applications. It provides a fast, memory-efficient way to manage asynchronous communication between components using an event bus pattern, with built-in event storage and observation capabilities based on ETS (Erlang Term Storage).
Elixir developers building applications that require decoupled, asynchronous communication between modules, such as microservices, real-time systems, or complex business logic workflows.
Developers choose EventBus for its performance (O(1) complexity for most operations), minimal core design requiring only three attributes, and extensibility through addons for metrics, logging, and persistence. Its built-in event watcher and traceability features simplify monitoring and debugging.
:surfer: Traceable, extendable and minimalist event bus implementation for Elixir with built-in event store and event watcher based on ETS.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Leverages ETS for O(1) complexity on most operations, ensuring fast concurrent reads and writes as highlighted in the README's features section.
Uses event shadows (ID and topic) instead of full data for subscriptions, reducing memory usage as described in the features.
Supports addons for metrics, logging, and persistence like PostgreSQL, allowing teams to enhance functionality without modifying the core library, as listed in the addons table.
Includes optional attributes such as transaction_id and timestamps, enabling detailed monitoring and compatibility with OpenTracing, as explained in the traceability section.
ETS storage is volatile; events are lost on application restart unless manually persisted via addons, which the README acknowledges requires extra setup in the event storage details.
Subscribers must explicitly mark events as completed or skipped, which can lead to processing errors or orphaned events if not handled properly, as shown in the sample subscriber implementation.
The minimalist core means advanced features like clustering or automatic retries are not included, requiring additional development or addons for complex scenarios.