Emissary is a simple-to-use, no dependency, yet BLAZING FAST messaging library for decoupling messages (requests and events) and message handlers.
Emissary aims to take advantage of the simplicity of using the annotations for handlers (e.g. @RequestHandler/@EventHandler) without the drawbacks of reflection (slow).
What differentiates Emissary from other messaging/dispatch libraries? It takes advantage of java.lang.invoke.LambdaMetafactory to avoid the cost of invoking methods reflectively. This results in performance close to directly invoking the request handler and event handler methods.
~ 1000% more throughput compared to other similar libraries (Spring's ApplicationEventPublisher, Pipelinr, EventBus)
~ 90% faster compared to other similar libraries (Spring's ApplicationEventPublisher, Pipelinr, EventBus)
This a frequently requested feature. At the moment, it only handles in-process messages but allowing for persistent events is definitely in the roadmap. It's not built-in right now, but this can be achieved by implementing custom RequestHandlerInvocationStrategy and EventHandlerInvocationStrategy. For example, one can implement an invocation strategy to serialize and send certain events to Kafka, queue, or your DB of choice.
I'm a big fan of Guava's EventBus. Easy to implement and straightforward to understand. This library does seem to require more setup and I don't see the immediate advantages, also why does it require an instanceProvider? I don't understand what that does.
Emissary is a simple-to-use, no dependency, yet BLAZING FAST messaging library for decoupling messages (requests and events) and message handlers.
Emissary aims to take advantage of the simplicity of using the annotations for handlers (e.g. @RequestHandler/@EventHandler) without the drawbacks of reflection (slow).
What differentiates Emissary from other messaging/dispatch libraries? It takes advantage of java.lang.invoke.LambdaMetafactory to avoid the cost of invoking methods reflectively. This results in performance close to directly invoking the request handler and event handler methods.
~ 1000% more throughput compared to other similar libraries (Spring's ApplicationEventPublisher, Pipelinr, EventBus) ~ 90% faster compared to other similar libraries (Spring's ApplicationEventPublisher, Pipelinr, EventBus)
Benchmarks found on the GitHub repository: https://github.com/joel-jeremy/emissary?tab=readme-ov-file#p...
Assuming that you are the author of Emissary, this could be a Show HN, I think.
https://news.ycombinator.com/showhn.html
Yes, I am the author. I didn't know that, I'll give it a try. Thank you for the tip!
> To post, submit a story whose title begins with "Show HN".
I always enjoy how low-tech this website is. Not necessarily great UX, but it's quaint.
1 reply →
Are you planning to add persistent events as well, so that events are not lost due to crashes
This a frequently requested feature. At the moment, it only handles in-process messages but allowing for persistent events is definitely in the roadmap. It's not built-in right now, but this can be achieved by implementing custom RequestHandlerInvocationStrategy and EventHandlerInvocationStrategy. For example, one can implement an invocation strategy to serialize and send certain events to Kafka, queue, or your DB of choice.
See: https://github.com/joel-jeremy/emissary/blob/main/emissary-c...
Here are the default invocation strategies built-in right now: https://github.com/joel-jeremy/emissary/tree/main/emissary-c...
I'm a big fan of Guava's EventBus. Easy to implement and straightforward to understand. This library does seem to require more setup and I don't see the immediate advantages, also why does it require an instanceProvider? I don't understand what that does.
Naming collision with an ActivityPub server https://emissary.dev/
And i2p rust router https://github.com/altonen/emissary
And Cmdr. Benjamin Sisko.
1 reply →
[dead]