A traceable, extendable, and minimalist event bus implementation for Elixir with built-in event store and watcher using ETS.
EventBus is an event bus implementation for Elixir that enables decoupled communication between application components via a publish-subscribe pattern. It includes a built-in event store and watcher using ETS for fast, memory-efficient event handling with optional traceability features.
Elixir developers building event-driven applications, microservices, or systems requiring decoupled component communication and event tracing.
Developers choose EventBus for its minimalist design, built-in event storage and observation, and extensibility through addons, all while maintaining high performance with O(1) complexity for core operations.
: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.
Uses ETS for O(1) complexity reads and writes, and pushes only event shadows (ID and topic) to subscribers to reduce memory overhead, as highlighted in the README.
Supports optional attributes like transaction_id, initialized_at, and occurred_at for detailed tracking, enabling better monitoring and debugging in event-driven systems.
Designed for extensibility with addons for metrics, logging, and persistence (e.g., PostgreSQL), allowing customization without bloating the core library.
Includes an event watcher via ETS tables to track processing status across subscribers, facilitating real-time debugging and oversight.
ETS-based event store is in-memory and volatile; persistent storage requires additional addons or custom implementation, as admitted in the README.
Subscribers must explicitly mark events as completed or skipped using EventBus.mark_as_* functions, adding boilerplate code and potential for oversight.
Prioritizes minimalism, so advanced features like error handling, retries, or distributed processing are not included and rely on extensions.