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
