You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by lekkie <le...@gmail.com> on 2010/03/04 08:50:11 UTC

Blocked endpoints: What EIP 'd be most appropriate?

I have a use case that requires a certain endpoint to be re-used. Lets say
the re-usable endpoint is called router1.

The flow below causes a blockage on my route and leads to camel throwing
exception.

consumerEndPoint -> router1 -> someIntermediateEndPoint -> router1`->
someProviderEndpoint ........


This flow is an InOut exchange flow. What is happening is that, because the
first message passes through router1 and it is still waiting for a response,
router1` will wait forever. I think camel throws the exception below

08:29:12,569 | INFO  | oLogger-thread-1 | Tracer                           |
rg.apache.camel.processor.Logger   88 | c66c0dd3-657a-4508-9295-c6f6b6d64a02
>>> (route20) OnException[ExchangeTimedOutException] --> transform[

08:29:12,569 | ERROR | oLogger-thread-1 | DefaultErrorHandler              |
rg.apache.camel.processor.Logger  202 | Failed delivery for exchangeId:
c66c0dd3-657a-4508-9295-c6f6b6d64a02. Processed by failure processor:
Channel[Transform(

08:29:33,653 | INFO  | saction-thread-1 | Tracer                           |
rg.apache.camel.processor.Logger   88 | c36c48b5-e18d-498e-9fed-b340e0baeb05
>>> vm://router1 --> OnException[ExchangeTimedOutException] <<<
Pattern:InOut, Headers:{operationName=null, nmrMessage=Message []},
BodyType:String, Body:

08:29:33,653 | INFO  | saction-thread-1 | Tracer                           |
rg.apache.camel.processor.Logger   88 | c36c48b5-e18d-498e-9fed-b340e0baeb05
>>> (route23) OnException[ExchangeTimedOutException] --> transform[

8:29:33,653 | ERROR | saction-thread-1 | DefaultErrorHandler              |
rg.apache.camel.processor.Logger  202 | Failed delivery for exchangeId:
c36c48b5-e18d-498e-9fed-b340e0baeb05. Processed by failure processor:
Channel[


Loadbalancer is not resolving this as it still ends up sending to same
router.

See my camel snippets below:

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
trace="true">
   <route>
   <from uri="nmr:consumerEndPoint"/>	
   <loadBalance ref="roundRobinRef">
       <to uri="vm:router1"/>
       <to uri="vm:router2"/>    
   </loadBalance>   
   </route>
</camelContext>

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
trace="true">
   <route>
   <from uri="nmr:someIntermediateEndPoint "/>	
   <loadBalance ref="roundRobinRef">
       <to uri="vm:router1"/>
       <to uri="vm:router2"/>    
   </loadBalance>   
   </route>
</camelContext>

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
trace="true">
   <route>
   <from uri="nmr:someProviderEndPoint"/>	
   <to uri="mock:whatever"/>
</route>
</camelContext>

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
trace="true">	
	<route>
		<from uri="vm:router1"/>	
		<bean ref="router1ProcessorRecipientList" method="route"/>
	</route>	
</camelContext>

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
trace="true">	
	<route>
		<from uri="vm:router2"/>	
		<bean ref="router2ProcessorRecipientList" method="route"/>
	</route>	
</camelContext>



What EIP would be the most appropriate for this scenario?

kr.
-- 
View this message in context: http://old.nabble.com/Blocked-endpoints%3A-What-EIP-%27d-be-most-appropriate--tp27777606p27777606.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Re: Blocked endpoints: What EIP 'd be most appropriate?

Posted by lekkie <le...@gmail.com>.
I tried that too.

Same difference.


willem.jiang wrote:
> 
> Did you try to use failover[1] ?
> 
> [1] http://camel.apache.org/load-balancer.html#LoadBalancer-Failover
> 
> Willem
> 
> lekkie wrote:
>> I have a use case that requires a certain endpoint to be re-used. Lets
>> say
>> the re-usable endpoint is called router1.
>> 
>> The flow below causes a blockage on my route and leads to camel throwing
>> exception.
>> 
>> consumerEndPoint -> router1 -> someIntermediateEndPoint -> router1`->
>> someProviderEndpoint ........
>> 
>> 
>> This flow is an InOut exchange flow. What is happening is that, because
>> the
>> first message passes through router1 and it is still waiting for a
>> response,
>> router1` will wait forever. I think camel throws the exception below
>> 
>> 08:29:12,569 | INFO  | oLogger-thread-1 | Tracer                          
>> |
>> rg.apache.camel.processor.Logger   88 |
>> c66c0dd3-657a-4508-9295-c6f6b6d64a02
>>>>> (route20) OnException[ExchangeTimedOutException] --> transform[
>> 
>> 08:29:12,569 | ERROR | oLogger-thread-1 | DefaultErrorHandler             
>> |
>> rg.apache.camel.processor.Logger  202 | Failed delivery for exchangeId:
>> c66c0dd3-657a-4508-9295-c6f6b6d64a02. Processed by failure processor:
>> Channel[Transform(
>> 
>> 08:29:33,653 | INFO  | saction-thread-1 | Tracer                          
>> |
>> rg.apache.camel.processor.Logger   88 |
>> c36c48b5-e18d-498e-9fed-b340e0baeb05
>>>>> vm://router1 --> OnException[ExchangeTimedOutException] <<<
>> Pattern:InOut, Headers:{operationName=null, nmrMessage=Message []},
>> BodyType:String, Body:
>> 
>> 08:29:33,653 | INFO  | saction-thread-1 | Tracer                          
>> |
>> rg.apache.camel.processor.Logger   88 |
>> c36c48b5-e18d-498e-9fed-b340e0baeb05
>>>>> (route23) OnException[ExchangeTimedOutException] --> transform[
>> 
>> 8:29:33,653 | ERROR | saction-thread-1 | DefaultErrorHandler             
>> |
>> rg.apache.camel.processor.Logger  202 | Failed delivery for exchangeId:
>> c36c48b5-e18d-498e-9fed-b340e0baeb05. Processed by failure processor:
>> Channel[
>> 
>> 
>> Loadbalancer is not resolving this as it still ends up sending to same
>> router.
>> 
>> See my camel snippets below:
>> 
>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>> trace="true">
>>    <route>
>>    <from uri="nmr:consumerEndPoint"/>	
>>    <loadBalance ref="roundRobinRef">
>>        <to uri="vm:router1"/>
>>        <to uri="vm:router2"/>    
>>    </loadBalance>   
>>    </route>
>> </camelContext>
>> 
>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>> trace="true">
>>    <route>
>>    <from uri="nmr:someIntermediateEndPoint "/>	
>>    <loadBalance ref="roundRobinRef">
>>        <to uri="vm:router1"/>
>>        <to uri="vm:router2"/>    
>>    </loadBalance>   
>>    </route>
>> </camelContext>
>> 
>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>> trace="true">
>>    <route>
>>    <from uri="nmr:someProviderEndPoint"/>	
>>    <to uri="mock:whatever"/>
>> </route>
>> </camelContext>
>> 
>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>> trace="true">	
>> 	<route>
>> 		<from uri="vm:router1"/>	
>> 		<bean ref="router1ProcessorRecipientList" method="route"/>
>> 	</route>	
>> </camelContext>
>> 
>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>> trace="true">	
>> 	<route>
>> 		<from uri="vm:router2"/>	
>> 		<bean ref="router2ProcessorRecipientList" method="route"/>
>> 	</route>	
>> </camelContext>
>> 
>> 
>> 
>> What EIP would be the most appropriate for this scenario?
>> 
>> kr.
> 
> 
> 

-- 
View this message in context: http://old.nabble.com/Blocked-endpoints%3A-What-EIP-%27d-be-most-appropriate--tp27777606p27780403.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Re: Blocked endpoints: What EIP 'd be most appropriate?

Posted by Willem Jiang <wi...@gmail.com>.
Did you try to use failover[1] ?

[1] http://camel.apache.org/load-balancer.html#LoadBalancer-Failover

Willem

lekkie wrote:
> I have a use case that requires a certain endpoint to be re-used. Lets say
> the re-usable endpoint is called router1.
> 
> The flow below causes a blockage on my route and leads to camel throwing
> exception.
> 
> consumerEndPoint -> router1 -> someIntermediateEndPoint -> router1`->
> someProviderEndpoint ........
> 
> 
> This flow is an InOut exchange flow. What is happening is that, because the
> first message passes through router1 and it is still waiting for a response,
> router1` will wait forever. I think camel throws the exception below
> 
> 08:29:12,569 | INFO  | oLogger-thread-1 | Tracer                           |
> rg.apache.camel.processor.Logger   88 | c66c0dd3-657a-4508-9295-c6f6b6d64a02
>>>> (route20) OnException[ExchangeTimedOutException] --> transform[
> 
> 08:29:12,569 | ERROR | oLogger-thread-1 | DefaultErrorHandler              |
> rg.apache.camel.processor.Logger  202 | Failed delivery for exchangeId:
> c66c0dd3-657a-4508-9295-c6f6b6d64a02. Processed by failure processor:
> Channel[Transform(
> 
> 08:29:33,653 | INFO  | saction-thread-1 | Tracer                           |
> rg.apache.camel.processor.Logger   88 | c36c48b5-e18d-498e-9fed-b340e0baeb05
>>>> vm://router1 --> OnException[ExchangeTimedOutException] <<<
> Pattern:InOut, Headers:{operationName=null, nmrMessage=Message []},
> BodyType:String, Body:
> 
> 08:29:33,653 | INFO  | saction-thread-1 | Tracer                           |
> rg.apache.camel.processor.Logger   88 | c36c48b5-e18d-498e-9fed-b340e0baeb05
>>>> (route23) OnException[ExchangeTimedOutException] --> transform[
> 
> 8:29:33,653 | ERROR | saction-thread-1 | DefaultErrorHandler              |
> rg.apache.camel.processor.Logger  202 | Failed delivery for exchangeId:
> c36c48b5-e18d-498e-9fed-b340e0baeb05. Processed by failure processor:
> Channel[
> 
> 
> Loadbalancer is not resolving this as it still ends up sending to same
> router.
> 
> See my camel snippets below:
> 
> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
> trace="true">
>    <route>
>    <from uri="nmr:consumerEndPoint"/>	
>    <loadBalance ref="roundRobinRef">
>        <to uri="vm:router1"/>
>        <to uri="vm:router2"/>    
>    </loadBalance>   
>    </route>
> </camelContext>
> 
> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
> trace="true">
>    <route>
>    <from uri="nmr:someIntermediateEndPoint "/>	
>    <loadBalance ref="roundRobinRef">
>        <to uri="vm:router1"/>
>        <to uri="vm:router2"/>    
>    </loadBalance>   
>    </route>
> </camelContext>
> 
> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
> trace="true">
>    <route>
>    <from uri="nmr:someProviderEndPoint"/>	
>    <to uri="mock:whatever"/>
> </route>
> </camelContext>
> 
> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
> trace="true">	
> 	<route>
> 		<from uri="vm:router1"/>	
> 		<bean ref="router1ProcessorRecipientList" method="route"/>
> 	</route>	
> </camelContext>
> 
> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
> trace="true">	
> 	<route>
> 		<from uri="vm:router2"/>	
> 		<bean ref="router2ProcessorRecipientList" method="route"/>
> 	</route>	
> </camelContext>
> 
> 
> 
> What EIP would be the most appropriate for this scenario?
> 
> kr.


Re: Blocked endpoints: What EIP 'd be most appropriate?

Posted by lekkie <le...@gmail.com>.
Am using vm already.


Claus Ibsen-2 wrote:
> 
> Hi
> 
> Try to do it in pure Camel, eg using seda, direct, vm etc and not the
> NMR or SMX.
> 
> 
> On Thu, Mar 4, 2010 at 2:38 PM, lekkie <le...@gmail.com> wrote:
>>
>> I saw this and I completely understand it.
>> my problem is not that router1 is waiting for initial request to complete
>> (I'd like it to wait as my request is an InOut), but, I will like it to
>> accept another request and respond to the appropriate endpoint (the one
>> that
>> initiated the request). That does not seem to be happening.
>>
>> What is happening is that, router1 receives an initial request (and keep
>> waiting for a response - which is fine), and receives another request and
>> sends the output message from initial request as a response to the second
>> request. Thats confusing, but it was what I got when I turned on the
>> trace
>> on the router.
>>
>> kr.
>>
>>
>>
>>
>> Claus Ibsen-2 wrote:
>>>
>>> Well if you take your time to read the VM wiki page, you will notice
>>> it extends the SEDA which offers options to configure the blocking
>>>
>>> http://camel.apache.org/vm
>>> http://camel.apache.org/seda.html
>>>
>>> You can use waitForTaskToComplete to control the blocking behavior
>>>
>>>
>>> On Thu, Mar 4, 2010 at 2:17 PM, lekkie <le...@gmail.com> wrote:
>>>>
>>>> Are you saying that you route to "route1" 2 times? eg kinda like in a
>>>> circle?
>>>>
>>>> You are right. The idea is to make router1 (which is a dynamic
>>>> recipient
>>>> EIP) to take messages and route to whichever endpoint. It is suppose to
>>>> be a
>>>> central endpoint. Collect msges route to the nxt endpoint and wait to
>>>> collect response and send to original requester.
>>>>
>>>> I didnt expect the router to block when it has not got response from
>>>> initial
>>>> request (which is why I used vm). Is there a non blocking endpoint that
>>>> can
>>>> do this?
>>>>
>>>> I tried this and it worked.
>>>>
>>>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>>>>  trace="true">
>>>>   <route>
>>>>   <from uri="nmr:consumerEndPoint"/>
>>>>   <loadBalance ref="roundRobinRef">
>>>>       <to uri="vm:router1"/>
>>>>       <to uri="vm:router2"/>
>>>>   </loadBalance>
>>>>   </route>
>>>>  </camelContext>
>>>>
>>>>  <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>>>>  trace="true">
>>>>   <route>
>>>>   <from uri="nmr:someIntermediateEndPoint "/>
>>>>   <loadBalance ref="roundRobinRef">
>>>>       <to uri="vm:router2"/>
>>>>       <to uri="vm:router1"/>
>>>>   </loadBalance>
>>>>   </route>
>>>>  </camelContext>
>>>>
>>>>
>>>>
>>>> Regards.
>>>>
>>>>
>>>> Claus Ibsen-2 wrote:
>>>>>
>>>>> On Thu, Mar 4, 2010 at 8:50 AM, lekkie <le...@gmail.com> wrote:
>>>>>>
>>>>>> I have a use case that requires a certain endpoint to be re-used.
>>>>>> Lets
>>>>>> say
>>>>>> the re-usable endpoint is called router1.
>>>>>>
>>>>>> The flow below causes a blockage on my route and leads to camel
>>>>>> throwing
>>>>>> exception.
>>>>>>
>>>>>> consumerEndPoint -> router1 -> someIntermediateEndPoint -> router1`->
>>>>>> someProviderEndpoint ........
>>>>>>
>>>>>
>>>>> Are you saying that you route to "route1" 2 times? eg kinda like in a
>>>>> circle?
>>>>>
>>>>> And what does your route1 recipient list do?
>>>>>
>>>>> All together I suggest to make your use case as simple as possible, to
>>>>> get something working.
>>>>> And then build from there.
>>>>>
>>>>> And you can change the MEP if you need.
>>>>>
>>>>>>
>>>>>> This flow is an InOut exchange flow. What is happening is that,
>>>>>> because
>>>>>> the
>>>>>> first message passes through router1 and it is still waiting for a
>>>>>> response,
>>>>>> router1` will wait forever. I think camel throws the exception below
>>>>>>
>>>>>> 08:29:12,569 | INFO  | oLogger-thread-1 | Tracer
>>>>>>   |
>>>>>> rg.apache.camel.processor.Logger   88 |
>>>>>> c66c0dd3-657a-4508-9295-c6f6b6d64a02
>>>>>>>>> (route20) OnException[ExchangeTimedOutException] --> transform[
>>>>>>
>>>>>> 08:29:12,569 | ERROR | oLogger-thread-1 | DefaultErrorHandler
>>>>>>  |
>>>>>> rg.apache.camel.processor.Logger  202 | Failed delivery for
>>>>>> exchangeId:
>>>>>> c66c0dd3-657a-4508-9295-c6f6b6d64a02. Processed by failure processor:
>>>>>> Channel[Transform(
>>>>>>
>>>>>> 08:29:33,653 | INFO  | saction-thread-1 | Tracer
>>>>>>   |
>>>>>> rg.apache.camel.processor.Logger   88 |
>>>>>> c36c48b5-e18d-498e-9fed-b340e0baeb05
>>>>>>>>> vm://router1 --> OnException[ExchangeTimedOutException] <<<
>>>>>> Pattern:InOut, Headers:{operationName=null, nmrMessage=Message []},
>>>>>> BodyType:String, Body:
>>>>>>
>>>>>> 08:29:33,653 | INFO  | saction-thread-1 | Tracer
>>>>>>   |
>>>>>> rg.apache.camel.processor.Logger   88 |
>>>>>> c36c48b5-e18d-498e-9fed-b340e0baeb05
>>>>>>>>> (route23) OnException[ExchangeTimedOutException] --> transform[
>>>>>>
>>>>>> 8:29:33,653 | ERROR | saction-thread-1 | DefaultErrorHandler
>>>>>>  |
>>>>>> rg.apache.camel.processor.Logger  202 | Failed delivery for
>>>>>> exchangeId:
>>>>>> c36c48b5-e18d-498e-9fed-b340e0baeb05. Processed by failure processor:
>>>>>> Channel[
>>>>>>
>>>>>>
>>>>>> Loadbalancer is not resolving this as it still ends up sending to
>>>>>> same
>>>>>> router.
>>>>>>
>>>>>> See my camel snippets below:
>>>>>>
>>>>>> <camelContext id="camel"
>>>>>> xmlns="http://camel.apache.org/schema/spring"
>>>>>> trace="true">
>>>>>>   <route>
>>>>>>   <from uri="nmr:consumerEndPoint"/>
>>>>>>   <loadBalance ref="roundRobinRef">
>>>>>>       <to uri="vm:router1"/>
>>>>>>       <to uri="vm:router2"/>
>>>>>>   </loadBalance>
>>>>>>   </route>
>>>>>> </camelContext>
>>>>>>
>>>>>> <camelContext id="camel"
>>>>>> xmlns="http://camel.apache.org/schema/spring"
>>>>>> trace="true">
>>>>>>   <route>
>>>>>>   <from uri="nmr:someIntermediateEndPoint "/>
>>>>>>   <loadBalance ref="roundRobinRef">
>>>>>>       <to uri="vm:router1"/>
>>>>>>       <to uri="vm:router2"/>
>>>>>>   </loadBalance>
>>>>>>   </route>
>>>>>> </camelContext>
>>>>>>
>>>>>> <camelContext id="camel"
>>>>>> xmlns="http://camel.apache.org/schema/spring"
>>>>>> trace="true">
>>>>>>   <route>
>>>>>>   <from uri="nmr:someProviderEndPoint"/>
>>>>>>   <to uri="mock:whatever"/>
>>>>>> </route>
>>>>>> </camelContext>
>>>>>>
>>>>>> <camelContext id="camel"
>>>>>> xmlns="http://camel.apache.org/schema/spring"
>>>>>> trace="true">
>>>>>>        <route>
>>>>>>                <from uri="vm:router1"/>
>>>>>>                <bean ref="router1ProcessorRecipientList"
>>>>>> method="route"/>
>>>>>>        </route>
>>>>>> </camelContext>
>>>>>>
>>>>>> <camelContext id="camel"
>>>>>> xmlns="http://camel.apache.org/schema/spring"
>>>>>> trace="true">
>>>>>>        <route>
>>>>>>                <from uri="vm:router2"/>
>>>>>>                <bean ref="router2ProcessorRecipientList"
>>>>>> method="route"/>
>>>>>>        </route>
>>>>>> </camelContext>
>>>>>>
>>>>>>
>>>>>>
>>>>>> What EIP would be the most appropriate for this scenario?
>>>>>>
>>>>>> kr.
>>>>>> --
>>>>>> View this message in context:
>>>>>> http://old.nabble.com/Blocked-endpoints%3A-What-EIP-%27d-be-most-appropriate--tp27777606p27777606.html
>>>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Claus Ibsen
>>>>> Apache Camel Committer
>>>>>
>>>>> Author of Camel in Action: http://www.manning.com/ibsen/
>>>>> Open Source Integration: http://fusesource.com
>>>>> Blog: http://davsclaus.blogspot.com/
>>>>> Twitter: http://twitter.com/davsclaus
>>>>>
>>>>>
>>>>
>>>> --
>>>> View this message in context:
>>>> http://old.nabble.com/Blocked-endpoints%3A-What-EIP-%27d-be-most-appropriate--tp27777606p27780598.html
>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>
>>>>
>>>
>>>
>>>
>>> --
>>> Claus Ibsen
>>> Apache Camel Committer
>>>
>>> Author of Camel in Action: http://www.manning.com/ibsen/
>>> Open Source Integration: http://fusesource.com
>>> Blog: http://davsclaus.blogspot.com/
>>> Twitter: http://twitter.com/davsclaus
>>>
>>>
>>
>> --
>> View this message in context:
>> http://old.nabble.com/Blocked-endpoints%3A-What-EIP-%27d-be-most-appropriate--tp27777606p27780828.html
>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>
>>
> 
> 
> 
> -- 
> Claus Ibsen
> Apache Camel Committer
> 
> Author of Camel in Action: http://www.manning.com/ibsen/
> Open Source Integration: http://fusesource.com
> Blog: http://davsclaus.blogspot.com/
> Twitter: http://twitter.com/davsclaus
> 
> 

-- 
View this message in context: http://old.nabble.com/Blocked-endpoints%3A-What-EIP-%27d-be-most-appropriate--tp27777606p27818866.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Re: Blocked endpoints: What EIP 'd be most appropriate?

Posted by Claus Ibsen <cl...@gmail.com>.
Hi

Try to do it in pure Camel, eg using seda, direct, vm etc and not the
NMR or SMX.


On Thu, Mar 4, 2010 at 2:38 PM, lekkie <le...@gmail.com> wrote:
>
> I saw this and I completely understand it.
> my problem is not that router1 is waiting for initial request to complete
> (I'd like it to wait as my request is an InOut), but, I will like it to
> accept another request and respond to the appropriate endpoint (the one that
> initiated the request). That does not seem to be happening.
>
> What is happening is that, router1 receives an initial request (and keep
> waiting for a response - which is fine), and receives another request and
> sends the output message from initial request as a response to the second
> request. Thats confusing, but it was what I got when I turned on the trace
> on the router.
>
> kr.
>
>
>
>
> Claus Ibsen-2 wrote:
>>
>> Well if you take your time to read the VM wiki page, you will notice
>> it extends the SEDA which offers options to configure the blocking
>>
>> http://camel.apache.org/vm
>> http://camel.apache.org/seda.html
>>
>> You can use waitForTaskToComplete to control the blocking behavior
>>
>>
>> On Thu, Mar 4, 2010 at 2:17 PM, lekkie <le...@gmail.com> wrote:
>>>
>>> Are you saying that you route to "route1" 2 times? eg kinda like in a
>>> circle?
>>>
>>> You are right. The idea is to make router1 (which is a dynamic recipient
>>> EIP) to take messages and route to whichever endpoint. It is suppose to
>>> be a
>>> central endpoint. Collect msges route to the nxt endpoint and wait to
>>> collect response and send to original requester.
>>>
>>> I didnt expect the router to block when it has not got response from
>>> initial
>>> request (which is why I used vm). Is there a non blocking endpoint that
>>> can
>>> do this?
>>>
>>> I tried this and it worked.
>>>
>>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>>>  trace="true">
>>>   <route>
>>>   <from uri="nmr:consumerEndPoint"/>
>>>   <loadBalance ref="roundRobinRef">
>>>       <to uri="vm:router1"/>
>>>       <to uri="vm:router2"/>
>>>   </loadBalance>
>>>   </route>
>>>  </camelContext>
>>>
>>>  <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>>>  trace="true">
>>>   <route>
>>>   <from uri="nmr:someIntermediateEndPoint "/>
>>>   <loadBalance ref="roundRobinRef">
>>>       <to uri="vm:router2"/>
>>>       <to uri="vm:router1"/>
>>>   </loadBalance>
>>>   </route>
>>>  </camelContext>
>>>
>>>
>>>
>>> Regards.
>>>
>>>
>>> Claus Ibsen-2 wrote:
>>>>
>>>> On Thu, Mar 4, 2010 at 8:50 AM, lekkie <le...@gmail.com> wrote:
>>>>>
>>>>> I have a use case that requires a certain endpoint to be re-used. Lets
>>>>> say
>>>>> the re-usable endpoint is called router1.
>>>>>
>>>>> The flow below causes a blockage on my route and leads to camel
>>>>> throwing
>>>>> exception.
>>>>>
>>>>> consumerEndPoint -> router1 -> someIntermediateEndPoint -> router1`->
>>>>> someProviderEndpoint ........
>>>>>
>>>>
>>>> Are you saying that you route to "route1" 2 times? eg kinda like in a
>>>> circle?
>>>>
>>>> And what does your route1 recipient list do?
>>>>
>>>> All together I suggest to make your use case as simple as possible, to
>>>> get something working.
>>>> And then build from there.
>>>>
>>>> And you can change the MEP if you need.
>>>>
>>>>>
>>>>> This flow is an InOut exchange flow. What is happening is that, because
>>>>> the
>>>>> first message passes through router1 and it is still waiting for a
>>>>> response,
>>>>> router1` will wait forever. I think camel throws the exception below
>>>>>
>>>>> 08:29:12,569 | INFO  | oLogger-thread-1 | Tracer
>>>>>   |
>>>>> rg.apache.camel.processor.Logger   88 |
>>>>> c66c0dd3-657a-4508-9295-c6f6b6d64a02
>>>>>>>> (route20) OnException[ExchangeTimedOutException] --> transform[
>>>>>
>>>>> 08:29:12,569 | ERROR | oLogger-thread-1 | DefaultErrorHandler
>>>>>  |
>>>>> rg.apache.camel.processor.Logger  202 | Failed delivery for exchangeId:
>>>>> c66c0dd3-657a-4508-9295-c6f6b6d64a02. Processed by failure processor:
>>>>> Channel[Transform(
>>>>>
>>>>> 08:29:33,653 | INFO  | saction-thread-1 | Tracer
>>>>>   |
>>>>> rg.apache.camel.processor.Logger   88 |
>>>>> c36c48b5-e18d-498e-9fed-b340e0baeb05
>>>>>>>> vm://router1 --> OnException[ExchangeTimedOutException] <<<
>>>>> Pattern:InOut, Headers:{operationName=null, nmrMessage=Message []},
>>>>> BodyType:String, Body:
>>>>>
>>>>> 08:29:33,653 | INFO  | saction-thread-1 | Tracer
>>>>>   |
>>>>> rg.apache.camel.processor.Logger   88 |
>>>>> c36c48b5-e18d-498e-9fed-b340e0baeb05
>>>>>>>> (route23) OnException[ExchangeTimedOutException] --> transform[
>>>>>
>>>>> 8:29:33,653 | ERROR | saction-thread-1 | DefaultErrorHandler
>>>>>  |
>>>>> rg.apache.camel.processor.Logger  202 | Failed delivery for exchangeId:
>>>>> c36c48b5-e18d-498e-9fed-b340e0baeb05. Processed by failure processor:
>>>>> Channel[
>>>>>
>>>>>
>>>>> Loadbalancer is not resolving this as it still ends up sending to same
>>>>> router.
>>>>>
>>>>> See my camel snippets below:
>>>>>
>>>>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>>>>> trace="true">
>>>>>   <route>
>>>>>   <from uri="nmr:consumerEndPoint"/>
>>>>>   <loadBalance ref="roundRobinRef">
>>>>>       <to uri="vm:router1"/>
>>>>>       <to uri="vm:router2"/>
>>>>>   </loadBalance>
>>>>>   </route>
>>>>> </camelContext>
>>>>>
>>>>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>>>>> trace="true">
>>>>>   <route>
>>>>>   <from uri="nmr:someIntermediateEndPoint "/>
>>>>>   <loadBalance ref="roundRobinRef">
>>>>>       <to uri="vm:router1"/>
>>>>>       <to uri="vm:router2"/>
>>>>>   </loadBalance>
>>>>>   </route>
>>>>> </camelContext>
>>>>>
>>>>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>>>>> trace="true">
>>>>>   <route>
>>>>>   <from uri="nmr:someProviderEndPoint"/>
>>>>>   <to uri="mock:whatever"/>
>>>>> </route>
>>>>> </camelContext>
>>>>>
>>>>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>>>>> trace="true">
>>>>>        <route>
>>>>>                <from uri="vm:router1"/>
>>>>>                <bean ref="router1ProcessorRecipientList"
>>>>> method="route"/>
>>>>>        </route>
>>>>> </camelContext>
>>>>>
>>>>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>>>>> trace="true">
>>>>>        <route>
>>>>>                <from uri="vm:router2"/>
>>>>>                <bean ref="router2ProcessorRecipientList"
>>>>> method="route"/>
>>>>>        </route>
>>>>> </camelContext>
>>>>>
>>>>>
>>>>>
>>>>> What EIP would be the most appropriate for this scenario?
>>>>>
>>>>> kr.
>>>>> --
>>>>> View this message in context:
>>>>> http://old.nabble.com/Blocked-endpoints%3A-What-EIP-%27d-be-most-appropriate--tp27777606p27777606.html
>>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Claus Ibsen
>>>> Apache Camel Committer
>>>>
>>>> Author of Camel in Action: http://www.manning.com/ibsen/
>>>> Open Source Integration: http://fusesource.com
>>>> Blog: http://davsclaus.blogspot.com/
>>>> Twitter: http://twitter.com/davsclaus
>>>>
>>>>
>>>
>>> --
>>> View this message in context:
>>> http://old.nabble.com/Blocked-endpoints%3A-What-EIP-%27d-be-most-appropriate--tp27777606p27780598.html
>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>
>>>
>>
>>
>>
>> --
>> Claus Ibsen
>> Apache Camel Committer
>>
>> Author of Camel in Action: http://www.manning.com/ibsen/
>> Open Source Integration: http://fusesource.com
>> Blog: http://davsclaus.blogspot.com/
>> Twitter: http://twitter.com/davsclaus
>>
>>
>
> --
> View this message in context: http://old.nabble.com/Blocked-endpoints%3A-What-EIP-%27d-be-most-appropriate--tp27777606p27780828.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>
>



-- 
Claus Ibsen
Apache Camel Committer

Author of Camel in Action: http://www.manning.com/ibsen/
Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus

Re: Blocked endpoints: What EIP 'd be most appropriate?

Posted by lekkie <le...@gmail.com>.
I saw this and I completely understand it.
my problem is not that router1 is waiting for initial request to complete
(I'd like it to wait as my request is an InOut), but, I will like it to
accept another request and respond to the appropriate endpoint (the one that
initiated the request). That does not seem to be happening.

What is happening is that, router1 receives an initial request (and keep
waiting for a response - which is fine), and receives another request and
sends the output message from initial request as a response to the second
request. Thats confusing, but it was what I got when I turned on the trace
on the router.

kr.




Claus Ibsen-2 wrote:
> 
> Well if you take your time to read the VM wiki page, you will notice
> it extends the SEDA which offers options to configure the blocking
> 
> http://camel.apache.org/vm
> http://camel.apache.org/seda.html
> 
> You can use waitForTaskToComplete to control the blocking behavior
> 
> 
> On Thu, Mar 4, 2010 at 2:17 PM, lekkie <le...@gmail.com> wrote:
>>
>> Are you saying that you route to "route1" 2 times? eg kinda like in a
>> circle?
>>
>> You are right. The idea is to make router1 (which is a dynamic recipient
>> EIP) to take messages and route to whichever endpoint. It is suppose to
>> be a
>> central endpoint. Collect msges route to the nxt endpoint and wait to
>> collect response and send to original requester.
>>
>> I didnt expect the router to block when it has not got response from
>> initial
>> request (which is why I used vm). Is there a non blocking endpoint that
>> can
>> do this?
>>
>> I tried this and it worked.
>>
>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>>  trace="true">
>>   <route>
>>   <from uri="nmr:consumerEndPoint"/>
>>   <loadBalance ref="roundRobinRef">
>>       <to uri="vm:router1"/>
>>       <to uri="vm:router2"/>
>>   </loadBalance>
>>   </route>
>>  </camelContext>
>>
>>  <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>>  trace="true">
>>   <route>
>>   <from uri="nmr:someIntermediateEndPoint "/>
>>   <loadBalance ref="roundRobinRef">
>>       <to uri="vm:router2"/>
>>       <to uri="vm:router1"/>
>>   </loadBalance>
>>   </route>
>>  </camelContext>
>>
>>
>>
>> Regards.
>>
>>
>> Claus Ibsen-2 wrote:
>>>
>>> On Thu, Mar 4, 2010 at 8:50 AM, lekkie <le...@gmail.com> wrote:
>>>>
>>>> I have a use case that requires a certain endpoint to be re-used. Lets
>>>> say
>>>> the re-usable endpoint is called router1.
>>>>
>>>> The flow below causes a blockage on my route and leads to camel
>>>> throwing
>>>> exception.
>>>>
>>>> consumerEndPoint -> router1 -> someIntermediateEndPoint -> router1`->
>>>> someProviderEndpoint ........
>>>>
>>>
>>> Are you saying that you route to "route1" 2 times? eg kinda like in a
>>> circle?
>>>
>>> And what does your route1 recipient list do?
>>>
>>> All together I suggest to make your use case as simple as possible, to
>>> get something working.
>>> And then build from there.
>>>
>>> And you can change the MEP if you need.
>>>
>>>>
>>>> This flow is an InOut exchange flow. What is happening is that, because
>>>> the
>>>> first message passes through router1 and it is still waiting for a
>>>> response,
>>>> router1` will wait forever. I think camel throws the exception below
>>>>
>>>> 08:29:12,569 | INFO  | oLogger-thread-1 | Tracer
>>>>   |
>>>> rg.apache.camel.processor.Logger   88 |
>>>> c66c0dd3-657a-4508-9295-c6f6b6d64a02
>>>>>>> (route20) OnException[ExchangeTimedOutException] --> transform[
>>>>
>>>> 08:29:12,569 | ERROR | oLogger-thread-1 | DefaultErrorHandler
>>>>  |
>>>> rg.apache.camel.processor.Logger  202 | Failed delivery for exchangeId:
>>>> c66c0dd3-657a-4508-9295-c6f6b6d64a02. Processed by failure processor:
>>>> Channel[Transform(
>>>>
>>>> 08:29:33,653 | INFO  | saction-thread-1 | Tracer
>>>>   |
>>>> rg.apache.camel.processor.Logger   88 |
>>>> c36c48b5-e18d-498e-9fed-b340e0baeb05
>>>>>>> vm://router1 --> OnException[ExchangeTimedOutException] <<<
>>>> Pattern:InOut, Headers:{operationName=null, nmrMessage=Message []},
>>>> BodyType:String, Body:
>>>>
>>>> 08:29:33,653 | INFO  | saction-thread-1 | Tracer
>>>>   |
>>>> rg.apache.camel.processor.Logger   88 |
>>>> c36c48b5-e18d-498e-9fed-b340e0baeb05
>>>>>>> (route23) OnException[ExchangeTimedOutException] --> transform[
>>>>
>>>> 8:29:33,653 | ERROR | saction-thread-1 | DefaultErrorHandler
>>>>  |
>>>> rg.apache.camel.processor.Logger  202 | Failed delivery for exchangeId:
>>>> c36c48b5-e18d-498e-9fed-b340e0baeb05. Processed by failure processor:
>>>> Channel[
>>>>
>>>>
>>>> Loadbalancer is not resolving this as it still ends up sending to same
>>>> router.
>>>>
>>>> See my camel snippets below:
>>>>
>>>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>>>> trace="true">
>>>>   <route>
>>>>   <from uri="nmr:consumerEndPoint"/>
>>>>   <loadBalance ref="roundRobinRef">
>>>>       <to uri="vm:router1"/>
>>>>       <to uri="vm:router2"/>
>>>>   </loadBalance>
>>>>   </route>
>>>> </camelContext>
>>>>
>>>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>>>> trace="true">
>>>>   <route>
>>>>   <from uri="nmr:someIntermediateEndPoint "/>
>>>>   <loadBalance ref="roundRobinRef">
>>>>       <to uri="vm:router1"/>
>>>>       <to uri="vm:router2"/>
>>>>   </loadBalance>
>>>>   </route>
>>>> </camelContext>
>>>>
>>>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>>>> trace="true">
>>>>   <route>
>>>>   <from uri="nmr:someProviderEndPoint"/>
>>>>   <to uri="mock:whatever"/>
>>>> </route>
>>>> </camelContext>
>>>>
>>>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>>>> trace="true">
>>>>        <route>
>>>>                <from uri="vm:router1"/>
>>>>                <bean ref="router1ProcessorRecipientList"
>>>> method="route"/>
>>>>        </route>
>>>> </camelContext>
>>>>
>>>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>>>> trace="true">
>>>>        <route>
>>>>                <from uri="vm:router2"/>
>>>>                <bean ref="router2ProcessorRecipientList"
>>>> method="route"/>
>>>>        </route>
>>>> </camelContext>
>>>>
>>>>
>>>>
>>>> What EIP would be the most appropriate for this scenario?
>>>>
>>>> kr.
>>>> --
>>>> View this message in context:
>>>> http://old.nabble.com/Blocked-endpoints%3A-What-EIP-%27d-be-most-appropriate--tp27777606p27777606.html
>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>
>>>>
>>>
>>>
>>>
>>> --
>>> Claus Ibsen
>>> Apache Camel Committer
>>>
>>> Author of Camel in Action: http://www.manning.com/ibsen/
>>> Open Source Integration: http://fusesource.com
>>> Blog: http://davsclaus.blogspot.com/
>>> Twitter: http://twitter.com/davsclaus
>>>
>>>
>>
>> --
>> View this message in context:
>> http://old.nabble.com/Blocked-endpoints%3A-What-EIP-%27d-be-most-appropriate--tp27777606p27780598.html
>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>
>>
> 
> 
> 
> -- 
> Claus Ibsen
> Apache Camel Committer
> 
> Author of Camel in Action: http://www.manning.com/ibsen/
> Open Source Integration: http://fusesource.com
> Blog: http://davsclaus.blogspot.com/
> Twitter: http://twitter.com/davsclaus
> 
> 

-- 
View this message in context: http://old.nabble.com/Blocked-endpoints%3A-What-EIP-%27d-be-most-appropriate--tp27777606p27780828.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Re: Blocked endpoints: What EIP 'd be most appropriate?

Posted by Claus Ibsen <cl...@gmail.com>.
Well if you take your time to read the VM wiki page, you will notice
it extends the SEDA which offers options to configure the blocking

http://camel.apache.org/vm
http://camel.apache.org/seda.html

You can use waitForTaskToComplete to control the blocking behavior


On Thu, Mar 4, 2010 at 2:17 PM, lekkie <le...@gmail.com> wrote:
>
> Are you saying that you route to "route1" 2 times? eg kinda like in a circle?
>
> You are right. The idea is to make router1 (which is a dynamic recipient
> EIP) to take messages and route to whichever endpoint. It is suppose to be a
> central endpoint. Collect msges route to the nxt endpoint and wait to
> collect response and send to original requester.
>
> I didnt expect the router to block when it has not got response from initial
> request (which is why I used vm). Is there a non blocking endpoint that can
> do this?
>
> I tried this and it worked.
>
> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>  trace="true">
>   <route>
>   <from uri="nmr:consumerEndPoint"/>
>   <loadBalance ref="roundRobinRef">
>       <to uri="vm:router1"/>
>       <to uri="vm:router2"/>
>   </loadBalance>
>   </route>
>  </camelContext>
>
>  <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>  trace="true">
>   <route>
>   <from uri="nmr:someIntermediateEndPoint "/>
>   <loadBalance ref="roundRobinRef">
>       <to uri="vm:router2"/>
>       <to uri="vm:router1"/>
>   </loadBalance>
>   </route>
>  </camelContext>
>
>
>
> Regards.
>
>
> Claus Ibsen-2 wrote:
>>
>> On Thu, Mar 4, 2010 at 8:50 AM, lekkie <le...@gmail.com> wrote:
>>>
>>> I have a use case that requires a certain endpoint to be re-used. Lets
>>> say
>>> the re-usable endpoint is called router1.
>>>
>>> The flow below causes a blockage on my route and leads to camel throwing
>>> exception.
>>>
>>> consumerEndPoint -> router1 -> someIntermediateEndPoint -> router1`->
>>> someProviderEndpoint ........
>>>
>>
>> Are you saying that you route to "route1" 2 times? eg kinda like in a
>> circle?
>>
>> And what does your route1 recipient list do?
>>
>> All together I suggest to make your use case as simple as possible, to
>> get something working.
>> And then build from there.
>>
>> And you can change the MEP if you need.
>>
>>>
>>> This flow is an InOut exchange flow. What is happening is that, because
>>> the
>>> first message passes through router1 and it is still waiting for a
>>> response,
>>> router1` will wait forever. I think camel throws the exception below
>>>
>>> 08:29:12,569 | INFO  | oLogger-thread-1 | Tracer
>>>   |
>>> rg.apache.camel.processor.Logger   88 |
>>> c66c0dd3-657a-4508-9295-c6f6b6d64a02
>>>>>> (route20) OnException[ExchangeTimedOutException] --> transform[
>>>
>>> 08:29:12,569 | ERROR | oLogger-thread-1 | DefaultErrorHandler
>>>  |
>>> rg.apache.camel.processor.Logger  202 | Failed delivery for exchangeId:
>>> c66c0dd3-657a-4508-9295-c6f6b6d64a02. Processed by failure processor:
>>> Channel[Transform(
>>>
>>> 08:29:33,653 | INFO  | saction-thread-1 | Tracer
>>>   |
>>> rg.apache.camel.processor.Logger   88 |
>>> c36c48b5-e18d-498e-9fed-b340e0baeb05
>>>>>> vm://router1 --> OnException[ExchangeTimedOutException] <<<
>>> Pattern:InOut, Headers:{operationName=null, nmrMessage=Message []},
>>> BodyType:String, Body:
>>>
>>> 08:29:33,653 | INFO  | saction-thread-1 | Tracer
>>>   |
>>> rg.apache.camel.processor.Logger   88 |
>>> c36c48b5-e18d-498e-9fed-b340e0baeb05
>>>>>> (route23) OnException[ExchangeTimedOutException] --> transform[
>>>
>>> 8:29:33,653 | ERROR | saction-thread-1 | DefaultErrorHandler
>>>  |
>>> rg.apache.camel.processor.Logger  202 | Failed delivery for exchangeId:
>>> c36c48b5-e18d-498e-9fed-b340e0baeb05. Processed by failure processor:
>>> Channel[
>>>
>>>
>>> Loadbalancer is not resolving this as it still ends up sending to same
>>> router.
>>>
>>> See my camel snippets below:
>>>
>>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>>> trace="true">
>>>   <route>
>>>   <from uri="nmr:consumerEndPoint"/>
>>>   <loadBalance ref="roundRobinRef">
>>>       <to uri="vm:router1"/>
>>>       <to uri="vm:router2"/>
>>>   </loadBalance>
>>>   </route>
>>> </camelContext>
>>>
>>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>>> trace="true">
>>>   <route>
>>>   <from uri="nmr:someIntermediateEndPoint "/>
>>>   <loadBalance ref="roundRobinRef">
>>>       <to uri="vm:router1"/>
>>>       <to uri="vm:router2"/>
>>>   </loadBalance>
>>>   </route>
>>> </camelContext>
>>>
>>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>>> trace="true">
>>>   <route>
>>>   <from uri="nmr:someProviderEndPoint"/>
>>>   <to uri="mock:whatever"/>
>>> </route>
>>> </camelContext>
>>>
>>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>>> trace="true">
>>>        <route>
>>>                <from uri="vm:router1"/>
>>>                <bean ref="router1ProcessorRecipientList" method="route"/>
>>>        </route>
>>> </camelContext>
>>>
>>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>>> trace="true">
>>>        <route>
>>>                <from uri="vm:router2"/>
>>>                <bean ref="router2ProcessorRecipientList" method="route"/>
>>>        </route>
>>> </camelContext>
>>>
>>>
>>>
>>> What EIP would be the most appropriate for this scenario?
>>>
>>> kr.
>>> --
>>> View this message in context:
>>> http://old.nabble.com/Blocked-endpoints%3A-What-EIP-%27d-be-most-appropriate--tp27777606p27777606.html
>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>
>>>
>>
>>
>>
>> --
>> Claus Ibsen
>> Apache Camel Committer
>>
>> Author of Camel in Action: http://www.manning.com/ibsen/
>> Open Source Integration: http://fusesource.com
>> Blog: http://davsclaus.blogspot.com/
>> Twitter: http://twitter.com/davsclaus
>>
>>
>
> --
> View this message in context: http://old.nabble.com/Blocked-endpoints%3A-What-EIP-%27d-be-most-appropriate--tp27777606p27780598.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>
>



-- 
Claus Ibsen
Apache Camel Committer

Author of Camel in Action: http://www.manning.com/ibsen/
Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus

Re: Blocked endpoints: What EIP 'd be most appropriate?

Posted by lekkie <le...@gmail.com>.
Are you saying that you route to "route1" 2 times? eg kinda like in a circle?

You are right. The idea is to make router1 (which is a dynamic recipient
EIP) to take messages and route to whichever endpoint. It is suppose to be a
central endpoint. Collect msges route to the nxt endpoint and wait to
collect response and send to original requester.

I didnt expect the router to block when it has not got response from initial
request (which is why I used vm). Is there a non blocking endpoint that can
do this?

I tried this and it worked.

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring" 
 trace="true"> 
   <route> 
   <from uri="nmr:consumerEndPoint"/> 
   <loadBalance ref="roundRobinRef"> 
       <to uri="vm:router1"/> 
       <to uri="vm:router2"/> 
   </loadBalance> 
   </route> 
 </camelContext> 
 
 <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring" 
 trace="true"> 
   <route> 
   <from uri="nmr:someIntermediateEndPoint "/> 
   <loadBalance ref="roundRobinRef"> 
       <to uri="vm:router2"/> 
       <to uri="vm:router1"/> 
   </loadBalance> 
   </route> 
 </camelContext>



Regards.


Claus Ibsen-2 wrote:
> 
> On Thu, Mar 4, 2010 at 8:50 AM, lekkie <le...@gmail.com> wrote:
>>
>> I have a use case that requires a certain endpoint to be re-used. Lets
>> say
>> the re-usable endpoint is called router1.
>>
>> The flow below causes a blockage on my route and leads to camel throwing
>> exception.
>>
>> consumerEndPoint -> router1 -> someIntermediateEndPoint -> router1`->
>> someProviderEndpoint ........
>>
> 
> Are you saying that you route to "route1" 2 times? eg kinda like in a
> circle?
> 
> And what does your route1 recipient list do?
> 
> All together I suggest to make your use case as simple as possible, to
> get something working.
> And then build from there.
> 
> And you can change the MEP if you need.
> 
>>
>> This flow is an InOut exchange flow. What is happening is that, because
>> the
>> first message passes through router1 and it is still waiting for a
>> response,
>> router1` will wait forever. I think camel throws the exception below
>>
>> 08:29:12,569 | INFO  | oLogger-thread-1 | Tracer                        
>>   |
>> rg.apache.camel.processor.Logger   88 |
>> c66c0dd3-657a-4508-9295-c6f6b6d64a02
>>>>> (route20) OnException[ExchangeTimedOutException] --> transform[
>>
>> 08:29:12,569 | ERROR | oLogger-thread-1 | DefaultErrorHandler            
>>  |
>> rg.apache.camel.processor.Logger  202 | Failed delivery for exchangeId:
>> c66c0dd3-657a-4508-9295-c6f6b6d64a02. Processed by failure processor:
>> Channel[Transform(
>>
>> 08:29:33,653 | INFO  | saction-thread-1 | Tracer                        
>>   |
>> rg.apache.camel.processor.Logger   88 |
>> c36c48b5-e18d-498e-9fed-b340e0baeb05
>>>>> vm://router1 --> OnException[ExchangeTimedOutException] <<<
>> Pattern:InOut, Headers:{operationName=null, nmrMessage=Message []},
>> BodyType:String, Body:
>>
>> 08:29:33,653 | INFO  | saction-thread-1 | Tracer                        
>>   |
>> rg.apache.camel.processor.Logger   88 |
>> c36c48b5-e18d-498e-9fed-b340e0baeb05
>>>>> (route23) OnException[ExchangeTimedOutException] --> transform[
>>
>> 8:29:33,653 | ERROR | saction-thread-1 | DefaultErrorHandler            
>>  |
>> rg.apache.camel.processor.Logger  202 | Failed delivery for exchangeId:
>> c36c48b5-e18d-498e-9fed-b340e0baeb05. Processed by failure processor:
>> Channel[
>>
>>
>> Loadbalancer is not resolving this as it still ends up sending to same
>> router.
>>
>> See my camel snippets below:
>>
>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>> trace="true">
>>   <route>
>>   <from uri="nmr:consumerEndPoint"/>
>>   <loadBalance ref="roundRobinRef">
>>       <to uri="vm:router1"/>
>>       <to uri="vm:router2"/>
>>   </loadBalance>
>>   </route>
>> </camelContext>
>>
>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>> trace="true">
>>   <route>
>>   <from uri="nmr:someIntermediateEndPoint "/>
>>   <loadBalance ref="roundRobinRef">
>>       <to uri="vm:router1"/>
>>       <to uri="vm:router2"/>
>>   </loadBalance>
>>   </route>
>> </camelContext>
>>
>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>> trace="true">
>>   <route>
>>   <from uri="nmr:someProviderEndPoint"/>
>>   <to uri="mock:whatever"/>
>> </route>
>> </camelContext>
>>
>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>> trace="true">
>>        <route>
>>                <from uri="vm:router1"/>
>>                <bean ref="router1ProcessorRecipientList" method="route"/>
>>        </route>
>> </camelContext>
>>
>> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
>> trace="true">
>>        <route>
>>                <from uri="vm:router2"/>
>>                <bean ref="router2ProcessorRecipientList" method="route"/>
>>        </route>
>> </camelContext>
>>
>>
>>
>> What EIP would be the most appropriate for this scenario?
>>
>> kr.
>> --
>> View this message in context:
>> http://old.nabble.com/Blocked-endpoints%3A-What-EIP-%27d-be-most-appropriate--tp27777606p27777606.html
>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>
>>
> 
> 
> 
> -- 
> Claus Ibsen
> Apache Camel Committer
> 
> Author of Camel in Action: http://www.manning.com/ibsen/
> Open Source Integration: http://fusesource.com
> Blog: http://davsclaus.blogspot.com/
> Twitter: http://twitter.com/davsclaus
> 
> 

-- 
View this message in context: http://old.nabble.com/Blocked-endpoints%3A-What-EIP-%27d-be-most-appropriate--tp27777606p27780598.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Re: Blocked endpoints: What EIP 'd be most appropriate?

Posted by Claus Ibsen <cl...@gmail.com>.
On Thu, Mar 4, 2010 at 8:50 AM, lekkie <le...@gmail.com> wrote:
>
> I have a use case that requires a certain endpoint to be re-used. Lets say
> the re-usable endpoint is called router1.
>
> The flow below causes a blockage on my route and leads to camel throwing
> exception.
>
> consumerEndPoint -> router1 -> someIntermediateEndPoint -> router1`->
> someProviderEndpoint ........
>

Are you saying that you route to "route1" 2 times? eg kinda like in a circle?

And what does your route1 recipient list do?

All together I suggest to make your use case as simple as possible, to
get something working.
And then build from there.

And you can change the MEP if you need.

>
> This flow is an InOut exchange flow. What is happening is that, because the
> first message passes through router1 and it is still waiting for a response,
> router1` will wait forever. I think camel throws the exception below
>
> 08:29:12,569 | INFO  | oLogger-thread-1 | Tracer                           |
> rg.apache.camel.processor.Logger   88 | c66c0dd3-657a-4508-9295-c6f6b6d64a02
>>>> (route20) OnException[ExchangeTimedOutException] --> transform[
>
> 08:29:12,569 | ERROR | oLogger-thread-1 | DefaultErrorHandler              |
> rg.apache.camel.processor.Logger  202 | Failed delivery for exchangeId:
> c66c0dd3-657a-4508-9295-c6f6b6d64a02. Processed by failure processor:
> Channel[Transform(
>
> 08:29:33,653 | INFO  | saction-thread-1 | Tracer                           |
> rg.apache.camel.processor.Logger   88 | c36c48b5-e18d-498e-9fed-b340e0baeb05
>>>> vm://router1 --> OnException[ExchangeTimedOutException] <<<
> Pattern:InOut, Headers:{operationName=null, nmrMessage=Message []},
> BodyType:String, Body:
>
> 08:29:33,653 | INFO  | saction-thread-1 | Tracer                           |
> rg.apache.camel.processor.Logger   88 | c36c48b5-e18d-498e-9fed-b340e0baeb05
>>>> (route23) OnException[ExchangeTimedOutException] --> transform[
>
> 8:29:33,653 | ERROR | saction-thread-1 | DefaultErrorHandler              |
> rg.apache.camel.processor.Logger  202 | Failed delivery for exchangeId:
> c36c48b5-e18d-498e-9fed-b340e0baeb05. Processed by failure processor:
> Channel[
>
>
> Loadbalancer is not resolving this as it still ends up sending to same
> router.
>
> See my camel snippets below:
>
> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
> trace="true">
>   <route>
>   <from uri="nmr:consumerEndPoint"/>
>   <loadBalance ref="roundRobinRef">
>       <to uri="vm:router1"/>
>       <to uri="vm:router2"/>
>   </loadBalance>
>   </route>
> </camelContext>
>
> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
> trace="true">
>   <route>
>   <from uri="nmr:someIntermediateEndPoint "/>
>   <loadBalance ref="roundRobinRef">
>       <to uri="vm:router1"/>
>       <to uri="vm:router2"/>
>   </loadBalance>
>   </route>
> </camelContext>
>
> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
> trace="true">
>   <route>
>   <from uri="nmr:someProviderEndPoint"/>
>   <to uri="mock:whatever"/>
> </route>
> </camelContext>
>
> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
> trace="true">
>        <route>
>                <from uri="vm:router1"/>
>                <bean ref="router1ProcessorRecipientList" method="route"/>
>        </route>
> </camelContext>
>
> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"
> trace="true">
>        <route>
>                <from uri="vm:router2"/>
>                <bean ref="router2ProcessorRecipientList" method="route"/>
>        </route>
> </camelContext>
>
>
>
> What EIP would be the most appropriate for this scenario?
>
> kr.
> --
> View this message in context: http://old.nabble.com/Blocked-endpoints%3A-What-EIP-%27d-be-most-appropriate--tp27777606p27777606.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>
>



-- 
Claus Ibsen
Apache Camel Committer

Author of Camel in Action: http://www.manning.com/ibsen/
Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus