camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From anandsk <sku...@arccorp.com>
Subject Re: async requests and responses on a single connection
Date Thu, 01 Apr 2010 16:45:33 GMT

you are right, async api doesn't. But I am talking about using sync option
with Mina. Mina has a timeout, so like I mentioned below wouldn't I have
syncrnization issues or message receive starvation issue and timeout on a
message. in the end I loose messages?. if I use sync=false option in Mina
then it returns before even reply arrives.



willem.jiang wrote:
> 
> 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);

>>>>>>>             } 
>>>>>>>         
>>>>>>> } 
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>
>>>
>>>
>> 
> 
> 
> 

-- 
View this message in context: http://old.nabble.com/async-requests-and-responses-on-a-single-connection-tp28071805p28110494.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Mime
View raw message