Camel riders,

I'm seeing an issue caused by the MulticastProcessor not handling async
routing end-to-end. It does use its own threadpool to process its routing
tasks, as well as to perform the aggregation (on-the-fly).

However, during all that time, the calling thread is blocked waiting for
the multicast to finish, even if the previous processors passed along an
AsyncCallback. This behaviour basically nullifies the async routing engine.

* How tough do you think it'll be to make the Multicast processor
async-aware end-to-end? My idea is to implement a technique similar to the
TemporaryReplyQueueManager in camel-jms, where we do bookkeeping in an
in-memory data structure, and trigger the AsyncCallback when we've
collected all aggregation steps, or if a timeout triggers.

* Do you think it's worthwhile to dedicate a full thread per request to
process its aggregations? In I/O bound cases, such as waiting for a WS
reply, file download, etc. it feels wasteful to keep a thread parked for
aggregations.

* What do you think about calling the aggregation strategy from the
thread(s) where the response(s) arrive(s)? (which could be from the
multicast threadpool or a component thread e.g. TempReplyQueueManager in
the case of JMS, depending on whether the component is sync or async).

In essence, I'm considering a multicast v2 implementation (which would also
affect RecipientList, Splitter, etc.) for 2.18, allowing the user to choose
the implementation via DSL, e.g.

    .multicast().v2()

It it's more efficient and feedback from users is good, we could make it
the default multicast processor in Camel 3.0.

Thoughts?

Cheers,

*Raúl Kripalani*
PMC & Committer @ Apache Ignite, Apache Camel | Integration, Big Data and
Messaging Engineer
http://about.me/raulkripalani | http://www.linkedin.com/in/raulkripalani
Blog: raul.io | twitter: @raulvk <https://twitter.com/raulvk>

Reply via email to