On Tue, Oct 20, 2009 at 6:28 AM, Claus Ibsen <[email protected]> wrote:
> On Mon, Oct 19, 2009 at 8:44 PM, Allen Lau <[email protected]> wrote:
>> Hi Claus,  I think having Camel decorate the message is a great idea.   We
>> are having the same issue where when a message goes to the DLQ.   For
>> components/endpoints we create ourselves, we usually try to add such a
>> header, but for existing Camel components, this information would be very
>> helpful.
>>
>
> I have created ticket to track this
> https://issues.apache.org/activemq/browse/CAMEL-2079
>

Camel now decorates this by adding properties to the exchange. See
details at the wiki page for the DLC (link on CAMEL-2079)


>> Thanks,
>> Allen
>>
>> On Mon, Oct 19, 2009 at 6:05 AM, Claus Ibsen <[email protected]> wrote:
>>
>>> On Tue, Oct 13, 2009 at 10:36 PM, terminator_007
>>> <[email protected]> wrote:
>>> >
>>> > hey,
>>> > thanks for the suggestion but I coudnt understand it...
>>> >
>>> > can you please elaborate a little...
>>> >
>>>
>>> Ah found your reply.
>>>
>>> In your route you have several endpoints that you send a message to.
>>> And in any case of an error you let the dead letter channel handle
>>> this error.
>>> Your problem is then you want to know if it was endpoint A, endpoint B
>>> or endpoint ... N that failed?
>>>
>>> What we could do is to let Camel decorate the message with a
>>> header/property that tells which endpoint was last invoked.
>>> Then it makes it super easy for you to know which endpoints failed.
>>>
>>> Does it make sense now?
>>>
>>>
>>> > thanks a ton.
>>> >
>>> >
>>> > Claus Ibsen-2 wrote:
>>> >>
>>> >> Hi
>>> >>
>>> >> Maybe we should let Camel add the endpoint a producer is sending to.
>>> >>
>>> >> Then when you route using .to("xxx") then Camel will add a header such
>>> as
>>> >> Exchange.SENDTO_ENDPOINT
>>> >>
>>> >> Which contains the XXX
>>> >>
>>> >> That would allow you to easily know which service failed.
>>> >>
>>> >>
>>> >>
>>> >>
>>> >> On Sun, Oct 11, 2009 at 1:39 AM, tide08 <[email protected]> wrote:
>>> >>>
>>> >>> I would assume that uri would be available in header as per Camel-Http
>>> >>> Documentation:
>>> >>>
>>> >>> HttpProducer.HTTP_URI - for v1.6.x
>>> >>> Exchange.HTTP_URI - for v2.x
>>> >>>
>>> >>> or else as other approach you can just set header to distinguish
>>> between
>>> >>> uri's avoiding custom processor for errorHandler itself.
>>> >>>
>>> >>> Something like -
>>> >>>
>>> >>> <to uri="bean:soapMessageCreator"/>
>>> >>>                        <multicast>
>>> >>> <pipeline>
>>> >>> <setHeader headerName="serviceName">
>>> >>>        <constant>serviceone</constant>
>>> >>>    </setHeader>
>>> >>>
>>> >>>                        <to
>>> >>> uri="http://mpkl04l34h9g2:8080/serviceone/subscriber"/>
>>> >>> </pipeline>
>>> >>> <pipeline>
>>> >>> <setHeader headerName="serviceName">
>>> >>>        <constant>servicetwo</constant>
>>> >>>    </setHeader>
>>> >>>
>>> >>>                        <to
>>> >>> uri="http://mpkl04l34h9g2:8080/servicetwo/subscriber"/>
>>> >>> </pipeline>
>>> >>>                        </multicast>
>>> >>>
>>> >>> All the best!
>>> >>>
>>> >>>
>>> >>>
>>> >>>
>>> >>> terminator_007 wrote:
>>> >>>>
>>> >>>> thanks for the suggestion..i have one doubt here..how do i get the
>>> know
>>> >>>> in
>>> >>>> the processor class which delivery has failed...i am delivering to two
>>> >>>> destinations...so is there any property on the xchange message which
>>> >>>> will
>>> >>>> tell me the delivery to which destination has failed ?
>>> >>>>
>>> >>>> tide08 wrote:
>>> >>>>>
>>> >>>>> You can register a processor which is invoked before message to DLQ.
>>> >>>>> This
>>> >>>>> can be achieved by property onRedelivery on DeadLetterChannelBuilder.
>>> >>>>> So
>>> >>>>> following should work -
>>> >>>>>
>>> >>>>> <bean id="myDeadLetterErrorHandler"
>>> >>>>> class="org.apache.camel.builder.DeadLetterChannelBuilder">
>>> >>>>>            <property name="onRedelivery" ref="myErrorProcessor"/>
>>> >>>>>            <property name="deadLetterUri"
>>> >>>>> value="activemq:queue:queue.DeadLetter"/>
>>> >>>>>             <property name="redeliveryPolicy"
>>> >>>>> ref="myRedeliveryPolicyConfig"/>
>>> >>>>>                 <property name="useOriginalMessage" value="true"/>
>>> >>>>>
>>> >>>>>              <property name="handled" value="false"/>
>>> >>>>>       </bean>
>>> >>>>>
>>> >>>>> <bean id="myErrorProcessor" class="com.app.CustomErrorProcessor" />
>>> >>>>>
>>> >>>>> You can than manipulate message header before it goes to DLQ.
>>> >>>>>
>>> >>>>> Thanks!
>>> >>>>>
>>> >>>>>
>>> >>>>> terminator_007 wrote:
>>> >>>>>>
>>> >>>>>> This is my configuration file
>>> >>>>>>
>>> >>>>>>     <bean id="soapMessageCreator" class="XXX.SOAPMessageCreator"/>
>>> >>>>>>
>>> >>>>>>      <bean id="myDeadLetterErrorHandler"
>>> >>>>>> class="org.apache.camel.builder.DeadLetterChannelBuilder">
>>> >>>>>>            <property name="deadLetterUri"
>>> >>>>>> value="activemq:queue:queue.DeadLetter"/>
>>> >>>>>>            <property name="redeliveryPolicy"
>>> >>>>>> ref="myRedeliveryPolicyConfig"/>
>>> >>>>>>                <property name="useOriginalMessage" value="true"/>
>>> >>>>>>
>>> >>>>>>             <property name="handled" value="false"/>
>>> >>>>>>      </bean>
>>> >>>>>>      <bean id="myRedeliveryPolicyConfig"
>>> >>>>>> class="org.apache.camel.processor.RedeliveryPolicy">
>>> >>>>>>            <property name="maximumRedeliveries" value="4"/>
>>> >>>>>>            <property name="redeliverDelay" value="250"/>
>>> >>>>>>      </bean>
>>> >>>>>>
>>> >>>>>>    <camelContext id="camel"
>>> >>>>>> xmlns="http://camel.apache.org/schema/spring"; >
>>> >>>>>>         <package>org.apache.camel.example.jmstofile</package>
>>> >>>>>>          <route errorHandlerRef="myDeadLetterErrorHandler">
>>> >>>>>>                     <from
>>> >>>>>>
>>> uri="activemq:topic:topic.Patient?clientId=testCamelClient&durableSubscriptionName=zyz123"/>
>>> >>>>>>             <to uri="bean:soapMessageCreator"/>
>>> >>>>>>                     <multicast>
>>> >>>>>>                     <to
>>> >>>>>> uri="http://mpkl04l34h9g2:8080/serviceone/subscriber"/>
>>> >>>>>>                     <to
>>> >>>>>> uri="http://mpkl04l34h9g2:8080/servicetwo/subscriber"/>
>>> >>>>>>                     </multicast>
>>> >>>>>>
>>> >>>>>>         </route>
>>> >>>>>>    </camelContext>
>>> >>>>>>
>>> >>>>>> <bean id="http"
>>> class="org.apache.camel.component.http.HttpComponent">
>>> >>>>>>     <property name="camelContext" ref="camel"/>
>>> >>>>>>     <property name="httpConnectionManager"
>>> >>>>>> ref="myHttpConnectionManager"/>
>>> >>>>>> </bean>
>>> >>>>>>
>>> >>>>>> <bean id="myHttpConnectionManager"
>>> >>>>>>
>>> class="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager">
>>> >>>>>>     <property name="params" ref="myHttpConnectionManagerParams"/>
>>> >>>>>> </bean>
>>> >>>>>>
>>> >>>>>> <bean id="myHttpConnectionManagerParams"
>>> >>>>>>
>>> class="org.apache.commons.httpclient.params.HttpConnectionManagerParams">
>>> >>>>>>     <property name="defaultMaxConnectionsPerHost" value="5"/>
>>> >>>>>> </bean>
>>> >>>>>>
>>> >>>>>>
>>> >>>>>> here, if one of my "to" destination is down, I see two messages in
>>> the
>>> >>>>>> DLQ.
>>> >>>>>> also, i want to modify the message header with the name of the
>>> >>>>>> destination that failed for example if service
>>> >>>>>> "http://mpkl04l34h9g2:8080/servicetwo/subscriber"; was down, I want
>>>  to
>>> >>>>>> add "http://mpkl04l34h9g2:8080/servicetwo/subscriber"; to
>>> >>>>>> messager/header/target before delivering the message to DLQ so that
>>> >>>>>> the
>>> >>>>>> admin process which checks messages in DLQ knows which are the
>>> targets
>>> >>>>>> which did not receive the message.
>>> >>>>>>
>>> >>>>>> Please suggest what can be done to achieve this.
>>> >>>>>>
>>> >>>>>
>>> >>>>>
>>> >>>>
>>> >>>>
>>> >>>
>>> >>> --
>>> >>> View this message in context:
>>> >>>
>>> http://www.nabble.com/modify-message-before-delivering-to-Dead-Letter-Queue-tp25827098p25838615.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/modify-message-before-delivering-to-Dead-Letter-Queue-tp25827098p25880385.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
>>>
>>
>
>
>
> --
> Claus Ibsen
> Apache Camel Committer
>
> Open Source Integration: http://fusesource.com
> Blog: http://davsclaus.blogspot.com/
> Twitter: http://twitter.com/davsclaus
>



-- 
Claus Ibsen
Apache Camel Committer

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

Reply via email to