Hi, Is it not possible for you to decouple request-response communication with your server using one way invocations and use a correlationId to correlate the server responses at a later point i.e.
1> Client sends a one way invocation to the server on a port XXX and optionally (sends a replyTo socket address in the payload) client: from("file:///test/test/response") .setHeader("replyToAddress, constant("XXX"); .to("mina:tcp://localhost:6202?sync=false"); 2> At a some later point the server responds to the replyToAddress with a response that is correlated using some correlationId in the data server: from("mina:tcp://localhost:6202?sync=false") .process(new Processor() { // ... process payload and get replyToAddress ... // sleep fo 20 seconds sleep(20000) // Send response to client ProducerTemplate template = new ProducerTemplate(); template.sendBody("XXX", response); }); Hope this helps. Cheers, Ashwin anandsk wrote: > > it seems to work when I use iofilter, but I am not sure when this producer > going to be destroyed, if it gets desroyed before it receives a reply then > I will loose message, I feel that this may not be a right solution. > > 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); > } > > } > > > > > anandsk wrote: >> >> Ashwin, >> >> it is a simulated consumer in my code with a delay, actual consumer is a >> external system which could take some time to send reply. >> >> I am using "toasync" instead of "to" so that I don't loose message. are >> we saying that option sync=false doesn't work in combination with >> "toasync"?. >> >> Thanks for working on a new framework. I am using this for a production >> app, so I don't have much time to wait and switch to a new tcp >> frameworks. >> >> Thanks, >> Anand >> >> Ashwin Karpe wrote: >>> >>> Hi, >>> >>> Anand, it seems like you have sync set to true for the consumer, thereby >>> making it a In-Out exchange driven consumer (i.e request/response). >>> >>> However your producer is set with sync=false thereby making it an >>> in-only. This will cause the response to fall through the cracks and >>> cause connection closure on the consumer. This should hopefully fix it >>> for you. >>> >>> BTW, as Claus mentioned, I am working on a Camel Netty component (coding >>> is done, currently writing tests and adding SSL support). I will bring >>> it to the community in the next 2-3 weeks after due testing and cleanup. >>> >>> Cheers, >>> >>> Ashwin... >>> >>> >>> anandsk wrote: >>>> >>>> Hi, Thanks for the response. I can use only one thread for sending >>>> messages becuase I can have only one TCP connection to external server. >>>> if I change sync flag to true then that thread is going to wait till >>>> the response comes back before it sends another message right?. I want >>>> to be able to send multiple requests one after the other without >>>> waiting for a response. responses need to be processed >>>> asynchronously.So, I can't set sync flag to true, is there any other >>>> solution to my problem. >>>> >>>> Thanks, >>>> Anand >>>> >>>> willem.jiang wrote: >>>>> >>>>> Hi I think you need to change the route like this >>>>> >>>>> from("mina:tcp://localhost:6202?textline=true&sync=true").process(new >>>>> Processor() { >>>>> public void process(Exchange exchange) throws Exception { >>>>> String body = exchange.getIn().getBody(String.class); >>>>> Thread.sleep(30000); >>>>> exchange.getOut().setBody("Bye 1" + body); >>>>> } >>>>> }); >>>>> >>>>> from("file:///test/test/response") >>>>> .convertBodyTo(String.class) >>>>> .toAsync("mina:tcp://localhost:6202?sync=true&textline=true",10) >>>>> .to("log:+++ reply++++"); >>>>> To make sure the mina client can get the right response. >>>>> >>>>> Willem >>>>> >>>>> anandsk wrote: >>>>>> Thanks. yes, I have seen the examples and I modified my code. but it >>>>>> still >>>>>> doesn't deliver reply asyncronously. >>>>>> I am thinking may be camel Mina's sync option may be conflicting with >>>>>> async >>>>>> route. Please see my code below. >>>>>> >>>>>> >>>>>> from("mina:tcp://localhost:6202?textline=true&sync=true").process(new >>>>>> Processor() { >>>>>> public void process(Exchange exchange) throws Exception { >>>>>> String body = exchange.getIn().getBody(String.class); >>>>>> Thread.sleep(30000); >>>>>> exchange.getOut().setBody("Bye 1" + body); >>>>>> } >>>>>> }); >>>>>> >>>>>> from("file:///test/test/response") >>>>>> .convertBodyTo(String.class) >>>>>> >>>>>> .toAsync("mina:tcp://localhost:6202?sync=false&textline=true",10) >>>>>> .to("log:+++ reply++++"); >>>>>> >>>>>> >>>>>> >>>>>> Claus Ibsen-2 wrote: >>>>>>> Have you seen the 2 asyncTo examples which are listed here? >>>>>>> http://camel.apache.org/examples.html >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Tue, Mar 2, 2010 at 5:10 PM, anandsk <sku...@arccorp.com> wrote: >>>>>>>> Hi, >>>>>>>> I tried this route with camel 2.2 and it is not forwarding response >>>>>>>> to >>>>>>>> end >>>>>>>> point defined in async "direct:response". also I see the logs >>>>>>>> showing >>>>>>>> that >>>>>>>> mina producer receiving the message back from tcp server but it is >>>>>>>> not >>>>>>>> forwarding them to async endpoint. am I doing this wrong. >>>>>>>> >>>>>>>> Thanks, >>>>>>>> Anand >>>>>>>> >>>>>>>> >>>>>>>> from("mina:tcp://localhost:6202?textline=true&sync=true").process(new >>>>>>>> Processor() { >>>>>>>> public void process(Exchange exchange) throws >>>>>>>> Exception { >>>>>>>> String body = >>>>>>>> exchange.getIn().getBody(String.class); >>>>>>>> //Thread.currentThread(); >>>>>>>> Thread.sleep(1000); >>>>>>>> exchange.getOut().setBody("Bye 1" + >>>>>>>> body+"\n"); >>>>>>>> //exchange.getOut().setBody("Bye 2" + >>>>>>>> body+"\n"); >>>>>>>> } >>>>>>>> }); >>>>>>>> >>>>>>>> >>>>>>>> //from("jms:test.Camel1") >>>>>>>> from("file:///test/test/response") >>>>>>>> .convertBodyTo(String.class).threads(1) >>>>>>>> //.to("log:jms.queue.message") >>>>>>>> //.bean(smooks.StatusRequestMessageHandler.class) >>>>>>>> //.setHeader(MinaEndpoint.HEADER_MINA_IOSESSION, >>>>>>>> expression) >>>>>>>> >>>>>>>> .to("mina:tcp://localhost:6202?textline=true&sync=true") >>>>>>>> .toAsync("direct:response",1) >>>>>>>> .to("log:direct"); >>>>>>>> >>>>>>>> from("direct:response") >>>>>>>> .to("log:jms.queue.message"); >>>>>>>> -- >>>>>>>> View this message in context: >>>>>>>> http://old.nabble.com/Mina-async-route-not-working-tp27757690p27757690.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 >>>>>>> >>>>>>> >>>>>> >>>>> >>>>> >>>>> >>>> >>>> >>> >>> >> >> > > ----- --- Ashwin Karpe, Principal Consultant, PS - Opensource Center of Competence Progress Software Corporation 14 Oak Park Drive Bedford, MA 01730 --- +1-972-304-9084 (Office) +1-972-971-1700 (Mobile) ---- Blog: http://opensourceknowledge.blogspot.com/ -- View this message in context: http://old.nabble.com/Mina-async-route-not-working-tp27757690p27779803.html Sent from the Camel - Users mailing list archive at Nabble.com.