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

Reply via email to