Hello all, I'm looking for some advice regarding SEDA and threads (camel 1.5.0). I'd like to be able to use multiple threads to pull from a SEDA component.
I've read the SEDA docs[1] including the section about Thread Pools[2], but I'm not quite able to get the behavior I want/expect. I've started with the following (simplified) configuration: <route> <from uri="timer://poller?period=10000" /> <to uri="seda:events" /> </route> <route> <from uri="seda:events"/> <idempotentConsumer messageIdRepositoryRef="eventIdRepository"> <el>${in.body.eventInstanceId}</el> <thread name="Event Thread Processor" coreSize="3" maxSize="5"> ...do some slow stuff... </thread> </idempotentConsumer> </route> This results in only 1 "Event Thread Processor" thread. The polling is asynchronous, as expected, but the idempotentConsumer only pulls from seda:events when the thread processor completes. Per the SEDA Thread Pools section[2] I did try using direct with a thread pool: <route> <from uri="timer://poller?period=10000" /> <to uri="direct:events" /> </route> <route> <from uri="direct:events"/> <thread name="Event Thread Processor" coreSize="3" maxSize="5"> <idempotentConsumer messageIdRepositoryRef="eventIdRepository"> <el>${in.body.eventInstanceId}</el> ...do some slow stuff... </idempotentConsumer> </thread> </route> But this results in the polling timer blocking until the thread processor completes, which I suppose is somewhat expected looking at it now. Do I need to use both a SEDA component and direct as in timer->SEDA->direct->thread? TIA, Doug [1] http://camel.apache.org/seda.html [2] http://camel.apache.org/seda.html/#SEDA-Threadpools