Hi tsegreti.
I'm curious why you say "using the AsyncEventListener but this listener has the constraint that it cannot be installed on every node"?
You can configure your async queues to be either serial or parallel. When they are serial, only a single listener is used, but in parallel mode a queue is configured on every member.
The big difference between async event listeners and cache listeners is that async listeners are exactly that - asynchronous, whereas cache listeners are called as part of the put operation. As such, cache listeners can affect the response time of the put and they also have the ability to pass exceptions back to the client as a result of the put.
Async queues are specifically designed for write behind as they manage all of the complexity of ensuring queued data is persisted and highly available in the event of a member failure.