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&amp;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.

Reply via email to