camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ariekenb <aaron.j.riekenb...@lmco.com>
Subject Re: SEDA Component Exception: No producer, this processor has not been started!
Date Wed, 06 May 2009 15:39:48 GMT

Thanks Claus.

I haven't done anything special to configure a DeadLetterChannel.  I assume
that means I get the default settings from here
http://camel.apache.org/dead-letter-channel.html (try up to 5 times 1 second
apart)?

Are messages guaranteed to stay in order if the first message goes into the
DeadLetterChannel?  I have observed the first message seems to always be
delivered first even when the exception below happens.

Is there an easy way to know if all components/processors in a CamelContext
are started?  I can easily get the CamelContext injected into the producer
bean, but I'm not sure what components I would need to check isStarted on
before sending a message.


Claus Ibsen-2 wrote:
> 
> Hi
> 
> Yeah its a race condition. You can configure your timer fire bean to
> wait eg some longer before it fires the first message.
> 
> As long as you use the DeadLetterChannel you should in fact not worry
> as it does redeliveries so in the next attempt it will usually succeed
> as the producer is started in the meantime. However if you disable
> redelivery etc. then the first message will not be delivered and lost.
> 
> But it would be best to wait a little before sending the very first
> message.
> 
> Otherwise you can use some Camel API to find the processor and test
> whether it is started with: isStarted()
> 
> 
> On Wed, May 6, 2009 at 4:36 PM, ariekenb <aaron.j.riekenberg@lmco.com>
> wrote:
>>
>> I two beans named producer and consumer.  Producer starts a
>> java.util.Timer
>> in its init method to pop every 100 ms and send a message to a SEDA queue
>> (using a ProducerTemplate it got from @EndpointInject).  Consumer has a
>> method to receive messages from the queue.  Here's the camel route:
>>
>>        <camel:camelContext
>>                id="test">
>>
>>                <camel:endpoint
>>                        id="sedaEndpoint"
>>                        uri="seda:test" />
>>
>>                <camel:route>
>>                        <camel:from
>>                                uri="sedaEndpoint" />
>>                        <camel:to
>>                              
>>  uri="bean:consumer?methodName=processMessage" />
>>                </camel:route>
>>
>>        </camel:camelContext>
>>
>>
>> I find sometimes just after Producer sends its first message, I get this
>> error logged.  This happens before Consumer has received any messages:
>>
>> 09:22:35,087 | ERROR | da:test thread:1 | DeadLetterChannel              
>>  |
>> rg.apache.camel.processor.Logger  203 | Failed delivery for exchangeId:
>> ID-swim4/48409-1241619754977/0-0. On delivery attempt: 0 caught:
>> java.lang.IllegalStateException: No producer, this processor has not been
>> started!
>> java.lang.IllegalStateException: No producer, this processor has not been
>> started!
>>        at
>> org.apache.camel.processor.SendProcessor.process(SendProcessor.java:78)
>>        at
>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:68)
>>        at
>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:185)
>>        at
>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:132)
>>        at
>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:68)
>>        at
>> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:52)
>>        at
>> org.apache.camel.component.seda.SedaConsumer.run(SedaConsumer.java:69)
>>        at java.lang.Thread.run(Thread.java:619)
>>
>>
>> This doesn't seem to cause anything bad to happen.  Even when this
>> exception
>> happens, Consumer still receives all messages from Producer in order.
>>
>> I'm just wondering why this happens.  Is there a race condition during
>> startup so that Producer can get its endpoint injected before camel is
>> ready
>> to route messages to Consumer?  Should I be concerned about this?
>> --
>> View this message in context:
>> http://www.nabble.com/SEDA-Component-Exception%3A-No-producer%2C-this-processor-has-not-been-started%21-tp23407604p23407604.html
>> Sent from the Camel - Users (activemq) 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
> Apache Camel Reference Card:
> http://refcardz.dzone.com/refcardz/enterprise-integration
> Interview with me:
> http://architects.dzone.com/articles/interview-claus-ibsen-about?mz=7893-progress
> 
> 

-- 
View this message in context: http://www.nabble.com/SEDA-Component-Exception%3A-No-producer%2C-this-processor-has-not-been-started%21-tp23407604p23409362.html
Sent from the Camel - Users (activemq) mailing list archive at Nabble.com.


Mime
View raw message