camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Willem Jiang <willem.ji...@gmail.com>
Subject Re: async requests and responses on a single connection
Date Thu, 01 Apr 2010 14:28:37 GMT
Current async API doesn't provides the mechanism to check if the 
response message is time out, maybe you should write some customer code 
to maintain the response message and do the time out check yourself.

Willem

anandsk wrote:
> I have looked over async. but I have to use only one connection and message
> receive order is not gauranteed, I am thinking it is possible to have
> syncrnization issues or message receive starvation issue and timeout on a
> message. in the end I loose messages?.
> 
> 
> 
> willem.jiang wrote:
>> I don't think current mina producer can do the work that you want.
>> But if you take a look at the Camel 2.x Async[1], and 
>> JettyHttpProduer[2], you can find a way to implement the async request 
>> and response with Camel.
>>
>> [1] http://camel.apache.org/async.html
>> [2] 
>> https://svn.apache.org/repos/asf/camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpProducer.java
>>
>> Willem
>>
>> anandsk wrote:
>>> Thanks for response,I beleive it's same behavior in camel mina 2.0 and
>>> 2.2.
>>> we are thinking of using 2.0M2 as we have release in a month. But my main
>>> question is how do I keep this producer object/component alive till a
>>> route
>>> is shutdown so that I don't loose any messages. any thoughts on solution
>>> below, i know it is not elegant as I am using filter to capture the
>>> replies
>>> from external server but would there be a possibility of loosing messages
>>> with this approach?. 
>>> also what is the life cycle of a producer/component?.
>>>
>>>
>>>
>>>
>>> willem.jiang wrote:
>>>> I think you can let the producer keep the connection.
>>>> I just checked the code of camel-mina, the mina producer only close the 
>>>> session if the disconnect option[1] is true (it is new for camel 2.3.0).
>>>> So please try out the latest Camel 2.3.0-SNAPSHOT for verification.
>>>>
>>>> [1]http://camel.apache.org/mina.html
>>>>
>>>> Willem
>>>>
>>>> anandsk wrote:
>>>>> can I make the producer object to stay around and keep it connected to
>>>>> external address until a route is shutdown that way we can gurantee no
>>>>> loss
>>>>> of message?.any thoughts?.
>>>>>
>>>>>
>>>>> anandsk wrote:
>>>>>> Sorry this may be a repost. I was wondering if anyone has solved
this.
>>>>>> I
>>>>>> can use only one thread for sending messages becuase I can have only
>>>>>> single TCP connection to external server. I want to be able to send
>>>>>> multiple requests one after the other without waiting for a response.
>>>>>> responses need to be processed asynchronously. any solutions for
this
>>>>>> scenario?. 
>>>>>> Here is one possible solution but I am not sure about the life cycle
>>>>>> of
>>>>>> the mina endpoint, is it possible to loose messages with this
>>>>>> solution?.
>>>>>> I
>>>>>> have also written custom component to share same
>>>>>> endpoint/receivehandler
>>>>>> for the producer and consumer. I would like to use below solution
or
>>>>>> variation of it  if there are no problems with it. as you can see
>>>>>> below
>>>>>> solution is very simple compared to writing a custom component.
>>>>>> also I want to findout if 2.3 or later releases have plans to include
>>>>>> a
>>>>>> component for the typical requirement defined above.
>>>>>>
>>>>>>
>>>>>>                 from("file:///test/test/response") 
>>>>>>                 .convertBodyTo(String.class).threads(1) 
>>>>>>                
>>>>>> .to("mina:tcp://localhost:6202?sync=false&textline=true&filters=#listFilters");

>>>>>>                 
>>>>>>                 from("vm:response") 
>>>>>>                 .to("log:+++ reply++++"); 
>>>>>>
>>>>>> public class MessageFilter extends IoFilterAdapter { 
>>>>>>     @Produce(uri = "vm:response") 
>>>>>>     ProducerTemplate producer; 
>>>>>>             @Override 
>>>>>>             public void messageReceived(NextFilter nextFilter,
>>>>>> IoSession
>>>>>> session, 
>>>>>>                     Object message) throws Exception { 
>>>>>>                 if (message instanceof String) { 
>>>>>>                 producer.sendBody(message); 
>>>>>>                     } 
>>>>>>                 
>>>>>>                 nextFilter.messageReceived(session, message); 
>>>>>>             } 
>>>>>>         
>>>>>> } 
>>>>>>
>>>>>>
>>>>>>
>>>>
>>
>>
> 


Mime
View raw message