[ 
https://issues.apache.org/jira/browse/JAMES-3996?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17851634#comment-17851634
 ] 

Benoit Tellier commented on JAMES-3996:
---------------------------------------

For the record this is the mailing list thread: 
https://www.mail-archive.com/server-dev@james.apache.org/msg73913.html

This POC was conclusive, Linagora is yet to be contributing this as an option 
to the ASF.

> POC: Move RabbitMQ Event bus user notifications to Redis?
> ---------------------------------------------------------
>
>                 Key: JAMES-3996
>                 URL: https://issues.apache.org/jira/browse/JAMES-3996
>             Project: James Server
>          Issue Type: Improvement
>            Reporter: René Cordier
>            Priority: Major
>
> In a setup with a RabbitMQ cluster, and quorum queues, we observed that if 
> Cassandra was unavailable for some reason, heavy nacks causing very high 
> absurd traffic with heavy memory usage, creating overall issues with the 
> event bus in general.
> Here the goal would be to investigate if it's possible to use Redis instead 
> of RabbitMQ for delegating the user notifications. Might use Redis pub-sub or 
> streams to achieve this, by registering the event listeners on Redis instead 
> of RabbitMQ.
> Concerned code on RabbitMQ event bus:
> {code:java}
>     default Publisher<Registration> register(EventListener listener, 
> RegistrationKey key) \{
>         return register(EventListener.wrapReactive(listener), key);
>     }
>     Publisher<Registration> register(EventListener.ReactiveEventListener 
> listener, RegistrationKey key);
>     default Publisher<Registration> 
> register(EventListener.ReactiveEventListener listener, 
> Collection<RegistrationKey> keys) \{
>         return Flux.fromIterable(keys)
>             .concatMap(key -> register(listener, key))
>             .reduce((reg1, reg2) -> () -> Flux.merge(reg1.unregister(), 
> reg2.unregister()))
>             .map(unRegistrationWithMergedFlux -> () -> 
> Mono.from(Flux.from(unRegistrationWithMergedFlux.unregister())
>                 .then()));
>     }
> {code}
> It's just a POC to see first if it's achievable or not, with performance 
> tests. If results are positive, we might envisage to integrate it in a 
> cleaner way. 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to