this looks like a good idea but external server vendor doesn't support this.
would there be any problems like loosing messages with iofilter approach
previously suggested or should I copy and customize Mina producer component
and change the messageReceiver method to send message to another endpoint
when it receives the message.

                from("file:///test/test/response")
                .convertBodyTo(String.class).threads(1)
                .to("custommina:tcp://localhost:6202?sync=false&textline=true");
                
                from("vm:response")
                .to("log:+++ reply++++"); 

snippet from class ResponseHandler 

    @Produce(uri = "vm:response")
    ProducerTemplate producer;      
  @Override
        public void messageReceived(IoSession ioSession, Object message)
throws Exception {
                        producer.sendBody(message);
 



Ashwin Karpe wrote:
> 
> 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
>>>>>>>>
>>>>>>>>
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>>> 
>>>> 
>>> 
>>> 
>> 
>> 
> 
> 

-- 
View this message in context: 
http://old.nabble.com/Mina-async-route-not-working-tp27757690p28190841.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to