You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Kaver <le...@ngs.ru> on 2009/08/19 03:51:23 UTC

Is Processor is thread-safe?

Hello.

I've a route:
from("restlet:http://localhost:9080/sts/request?restletMethod=POST").process(requestProcessor);

I create requestProcessor in Spring and inject it to my RouteBuilder. Should
requestProcessor be thread-safe? If there will be several messages from
endpoint, there will be several threads performing on one instance
requestProcessor (like in servlets), or these events will be quened and will
be processed in single thread?
-- 
View this message in context: http://www.nabble.com/Is-Processor-is-thread-safe--tp25036519p25036519.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Re: Is Processor is thread-safe?

Posted by Kaver <le...@ngs.ru>.
Thank you very much!


Claus Ibsen-2 wrote:
> 
> On Wed, Aug 19, 2009 at 3:51 AM, Kaver<le...@ngs.ru> wrote:
>>
>> Hello.
>>
>> I've a route:
>> from("restlet:http://localhost:9080/sts/request?restletMethod=POST").process(requestProcessor);
>>
>> I create requestProcessor in Spring and inject it to my RouteBuilder.
>> Should
>> requestProcessor be thread-safe? If there will be several messages from
>> endpoint, there will be several threads performing on one instance
>> requestProcessor (like in servlets), or these events will be quened and
>> will
>> be processed in single thread?
>> --
> 
> You get concurrency by the consumer whether it supports concurrent
> consumers. The HTTP based obviously supports that so the reslet will
> process concurrent incoming requests and thus Camel will route
> concurrently as well.
> 
> So your requestProcessor will be invoked concurrently also. So yes
> design it to be thread safe.
> 
> 
> As its provided by Spring you can let spring provide its lifecycle.
> Spring uses singleton by default. You can change that to prototype so
> a new instance is returned on each request. And then use .processRef
> to refer to by its spring bean id and you get a new instance for each
> request.
> 
> But I suggest to just let processor be thread safe, eg by doing all
> you need inside the process method, without having state on the class
> itself and you should be safe.
> 
> 
>> View this message in context:
>> http://www.nabble.com/Is-Processor-is-thread-safe--tp25036519p25036519.html
>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>
>>
> 
> 
> 
> -- 
> Claus Ibsen
> Apache Camel Committer
> 
> Open Source Integration: http://fusesource.com
> Blog: http://davsclaus.blogspot.com/
> Twitter: http://twitter.com/davsclaus
> 
> 

-- 
View this message in context: http://www.nabble.com/Is-Processor-is-thread-safe--tp25036519p25038964.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Re: Is Processor is thread-safe?

Posted by Claus Ibsen <cl...@gmail.com>.
On Wed, Aug 19, 2009 at 3:51 AM, Kaver<le...@ngs.ru> wrote:
>
> Hello.
>
> I've a route:
> from("restlet:http://localhost:9080/sts/request?restletMethod=POST").process(requestProcessor);
>
> I create requestProcessor in Spring and inject it to my RouteBuilder. Should
> requestProcessor be thread-safe? If there will be several messages from
> endpoint, there will be several threads performing on one instance
> requestProcessor (like in servlets), or these events will be quened and will
> be processed in single thread?
> --

You get concurrency by the consumer whether it supports concurrent
consumers. The HTTP based obviously supports that so the reslet will
process concurrent incoming requests and thus Camel will route
concurrently as well.

So your requestProcessor will be invoked concurrently also. So yes
design it to be thread safe.


As its provided by Spring you can let spring provide its lifecycle.
Spring uses singleton by default. You can change that to prototype so
a new instance is returned on each request. And then use .processRef
to refer to by its spring bean id and you get a new instance for each
request.

But I suggest to just let processor be thread safe, eg by doing all
you need inside the process method, without having state on the class
itself and you should be safe.


> View this message in context: http://www.nabble.com/Is-Processor-is-thread-safe--tp25036519p25036519.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>
>



-- 
Claus Ibsen
Apache Camel Committer

Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus