A high-performance Java messaging library for decoupling requests and events from their handlers using annotations without reflection overhead.
Emissary is a high-performance Java messaging library that decouples messages (requests and events) from their handlers using annotations. It solves the problem of tight coupling between message producers and consumers by providing a fast, reflection-free dispatch mechanism that integrates with dependency injection frameworks.
Java developers building modular, maintainable applications who need a performant messaging layer, especially those implementing CQRS, event-driven architectures, or seeking to replace slower reflection-based libraries.
Developers choose Emissary for its exceptional speed (up to 1000% more throughput than alternatives), zero dependencies, and seamless integration with popular DI containers without sacrificing handler lifecycle management or annotation simplicity.
Emissary is simple, yet 🗲FAST🗲 messaging library for decoupling messages (requests and events) and message handlers 🚀
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 LambdaMetafactory for direct method invocation, avoiding reflection and achieving up to 1000% more throughput compared to libraries like Spring's ApplicationEventPublisher, as shown in the benchmark links.
Integrates with Spring, Guice, and Jakarta CDI via the InstanceProvider interface, allowing handlers to be fully managed by DI containers with lifecycle hooks like @PostConstruct.
Supports custom annotations for handlers, enabling use in domain layers without adding library dependencies, as detailed in the 'Custom Request/Event Handler Annotations' section.
The core library has zero external dependencies, reducing bloat and version conflicts while maintaining simplicity, as emphasized in the philosophy.
Renamed from Deezpatch to Emissary with module name changes in v2.0.0, indicating potential instability and migration hurdles for early adopters.
Lacks built-in support for message queuing, retry policies, or dead-letter handling, which are common in enterprise messaging systems, requiring manual implementation.
Requires manual InstanceProvider implementation when not using a DI framework, adding boilerplate code compared to libraries with simpler registration mechanisms.