camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From harinair <har...@hotmail.com>
Subject Re: Two questions: Stopping Camel and intercept before retry
Date Thu, 08 Jan 2009 19:25:50 GMT

Claus:

Thanks once again - I will do that. So that my interceptor is called only
once.

Do you think it is a good idea to add this shutdown hook to the Main.main()?
In that I can remove my main() and the HangUpInterceptor. I can also make
that modification and submit. I think I have to sign the Apache Development
agreement or something? I will do that too.

PS: I just noticed that the DEAD LETTER CHANNEL Wiki page seems to be
updated incorrectly. The new section you added is missing. Take a look.

Regards,
Hari Gangadharan



Claus Ibsen-2 wrote:
> 
> On Thu, Jan 8, 2009 at 1:53 AM, harinair <hari_g@hotmail.com> wrote:
>>
>> Thanks a lot for the quick reply.
>>
>> I read your wiki writeup. Doesn't that make the interceptor run on all
>> the
>> subsequent pipelines if the Redelivered flag is not set to null by the
>> Interceptor? Is it OK to set the Redelivered Flag to null? Is that used
>> by
>> any other Camel components?
> Hi yeah I think you can clear the flag after you have done your custom
> processing, so it wont intercept it again.
> Camel should readd if it fails on the next attempt of redelivery. Good
> idea.
> 
> No the flag is for end users to inspect, to notice if the exchange is
> being redeliveried. It's not used by other components.
> 
> But I will see if I can create a better solution with a nicer
> configuration using DLC directly or onException,
> 
> 
>>
>>
>> For stopping Camel gracefully - I did something like this:
>> in my main():
>>
>>
>>>         org.apache.camel.spring.Main main = new
>>> org.apache.camel.spring.Main();
>>>         HangUpInterceptor interceptor = new HangUpInterceptor(main);
>>>         Runtime.getRuntime().addShutdownHook(interceptor);
>>>         main.start();
>>>
>>
>> I also added a HangUpInterceptor:
>>
>>
>>> public class HangUpInterceptor extends Thread {
>>>
>>>     Log log = LogFactory.getLog(this.getClass());
>>>     Main main;
>>>
>>>     public HangUpInterceptor(Main main) {
>>>         this.main = main;
>>>     }
>>>
>>>     public void run() {
>>>         log.info("Recieved hang up - stopping Camel.");
>>>         try {
>>>             main.stop();
>>>         } catch (Exception ex) {
>>>             log.warn("Failure stopping Camel", ex);
>>>         }
>>>     }
>>> }
>>>
>>
>> Now the process goes down gracefully on a kill -HUP.
> Yeah I thought of a shutdown hook to stop Camel. That should do the trick.
> 
> 
>>
>> Regards,
>> Hari Gangadharan
>>
>>
>>
>> Claus Ibsen-2 wrote:
>>>
>>> Hi
>>>
>>> I have created a ticket to enhanced this in Camel
>>> https://issues.apache.org/activemq/browse/CAMEL-1234
>>>
>>> I have also added a wiki sample with a solution. Albeit not as good as
>>> it will kick in even if the redelivery was a success as long the
>>> redelivery flag is set
>>> But it give the basic idea how to do it.
>>> http://cwiki.apache.org/confluence/display/CAMEL/Dead+Letter+Channel
>>>
>>>
>>>
>>> On Wed, Jan 7, 2009 at 11:52 AM, Claus Ibsen <claus.ibsen@gmail.com>
>>> wrote:
>>>> Hi
>>>>
>>>> I am working on some samples now for this. Will get back later.
>>>>
>>>>
>>>> On Wed, Jan 7, 2009 at 6:52 AM, Willem Jiang <willem.jiang@gmail.com>
>>>> wrote:
>>>>> Hi,
>>>>>
>>>>> Please see my comment in the mail.
>>>>>
>>>>> harinair wrote:
>>>>>> Hi All:
>>>>>>
>>>>>> Thanks a lot for all the help I have received. We are nearing a
>>>>>> production
>>>>>> implementation of a Camel based messaging system! It was a great
>>>>>> experience,
>>>>>> I learned a lot and we saved a lot of time since I used Camel.
>>>>>>
>>>>>> I now have two questions:
>>>>>>
>>>>>> 1. I use org.apache.camel.spring.Main to start my standalone Camel
>>>>>> context.
>>>>>> Now how do I stop it? Till now I was killing it. Can I kill it? I
>>>>>> guess
>>>>>> it
>>>>>> may not be the right way since I have a feeling that the messages
in
>>>>>> the
>>>>>> pipeline (especially the ones that are in Retry processing) is lost.
>>>>>>
>>>>>
>>>>> If you take a look at the org.apache.camel.spring.Main, you will find
>>>>> this Main class has start and stop methods, so you could write your
>>>>> own
>>>>> manager class which is based on the Spring main.
>>>>>
>>>>>
>>>>>> 2. I really need to get access to the Message between each retry.
I
>>>>>> use
>>>>>> recipientList to forward message to different endpoints based on
a
>>>>>> header. I
>>>>>> have also retry rules which make the Endpoint retry a specific number
>>>>>> of
>>>>>> times. In many cases I may have to get control and make some header
>>>>>> modification of the message before each retry. I could not find any
>>>>>> good
>>>>>> docs on that. Is there any Strategy implementation I can use that
can
>>>>>> get
>>>>>> control of the exchange before each retry? If that is not there
>>>>>> wouldn't it
>>>>>> be a good idea to provide a way to intercept messages before each
>>>>>> retry?
>>>>>>
>>>>> I think you need get to know some detail of the camel
>>>>> ErrorHandler[1][2]
>>>>> first, then you could write your own DeadLetterChannel[3][4] to add
>>>>> you
>>>>> what you need to control the exchange before retrying.
>>>>>
>>>>>> Thanks in advance,
>>>>>> Hari Gangadharan
>>>>>>
>>>>>
>>>>> [1]http://activemq.apache.org/camel/error-handling-in-camel.html
>>>>> [2]http://activemq.apache.org/camel/error-handler.html
>>>>> [3]http://activemq.apache.org/camel/dead-letter-channel.html
>>>>> [4]http://svn.apache.org/repos/asf/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java
>>>>>
>>>>> Willem
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>>
>>>> /Claus Ibsen
>>>> Apache Camel Committer
>>>> Blog: http://davsclaus.blogspot.com/
>>>>
>>>
>>>
>>>
>>> --
>>>
>>> /Claus Ibsen
>>> Apache Camel Committer
>>> Blog: http://davsclaus.blogspot.com/
>>>
>>>
>>
>> --
>> View this message in context:
>> http://www.nabble.com/Two-questions%3A-Stopping-Camel-and-intercept-before-retry-tp21323127s22882p21343817.html
>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>
>>
> 
> 
> 
> -- 
> 
> /Claus Ibsen
> Apache Camel Committer
> Blog: http://davsclaus.blogspot.com/
> 
> 

-- 
View this message in context: http://www.nabble.com/Two-questions%3A-Stopping-Camel-and-intercept-before-retry-tp21323127s22882p21359117.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Mime
View raw message