Hi James

I did that too for what it's worth.
I send the message to a route that forwards to both the aggregator and to the 
socket. 
When the response comes in I use an enricher to add the ID to the headers and 
then forward to the aggregator.

Taariq

On 16 Aug 2011, at 8:55 PM, James Carman <ja...@carmanconsulting.com> wrote:

> Willem,
> 
> Thank you for your help.  I don't think this is doing exactly what I
> need, though.  The real trick here is the asynchronous nature of the
> "server" on the other end of this situation.  I thought about using an
> aggregator to make sure the response gets matched up with the request
> using a correlation id.  The aggregator wouldn't aggregate multiple
> responses together into one, it would just make sure it matches the
> correct response with its request.  Does this sound like a valid
> approach?  If so, how the heck do I go about it? :)
> 
> Thanks,
> 
> James
> 
> On Sun, Aug 7, 2011 at 9:03 PM, Willem Jiang <willem.ji...@gmail.com> wrote:
>> Hi James,
>> 
>> Camel async process engine already provides the way that you want.
>> You can take a look at the camel-cxf code[1][2] for some example.
>> 
>> [1]http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java?view=markup
>> [2]http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfProducer.java?view=markup
>> 
>> On 8/7/11 1:29 AM, James Carman wrote:
>>> 
>>> On Sat, Aug 6, 2011 at 10:33 AM, Zbarcea Hadrian<hzbar...@gmail.com>
>>>  wrote:
>>>> 
>>>> Hi James,
>>>> 
>>>> I hope I understand your scenario correctly. Here are a few thoughts. I
>>>> assume want to use camel-netty [1] to send messages to your sever (if you
>>>> have your own code that does that, you can use it too, but you'd have to
>>>> write your own Processor or Component). Iiuic, your scenario is converting 
>>>> a
>>>> 2x in-only to a 1x in-out async mep. You should then treat your exchange as
>>>> an async in-out and let your framework (Camel) decompose it and compose it
>>>> back again. I would not keep threads blocked so I believe your best bet is
>>>> using the Camel async messaging [2] and Futures (look at the examples using
>>>> asyncSend* and asyncCallback*). The issue is that Camel is stateless so
>>>> you'll need a correlationId, which you must have already and something to
>>>> keep your state. A good bet would be jms [3], or you could write your own.
>>>> If you used jms you would need to use both a correlationId and a replyTo
>>>> queue.
>>>> 
>>>> from("jms:request-queue").to("netty:output?=correlationId");
>>>> from("netty:input).to("jms:replyTo-queue")
>>>> 
>>> 
>>> Perhaps a bit more information might be appropriate here.  Eventually,
>>> I'd like to "expose" this route via web services (using CXF of
>>> course).  So, I would need to either block the request thread, waiting
>>> for a reply or perhaps check out the new Servlet 3.0 asynchronous
>>> processing stuff (I'm thinking this might help us get more done with
>>> less http request threads) to do more of a continuation thing.
>>> 
>>> We already have a correlation id.  The "protocol" requires one and the
>>> server process just echos it back in the response message.
>>> 
>>>> You may have to play a bit with the correlationId and if you cannot use
>>>> the same you can do a second transformation/correlation using a claim-check
>>>> sort of pattern. If you don't want to use jms you can implement your own 
>>>> (in
>>>> memory) persistence and correlation. You can also use a resequencer [4] if
>>>> you want to enforce the order. If you use asyncCallback, you get the 
>>>> replies
>>>> when they become available, and you can control that.
>>>> 
>>> 
>>> I don't think a resequencer is necessary.  I don't want to guarantee
>>> the ordering.  I'm mostly interested in throughput here.  So, if a
>>> message comes in after another, but it can be processed faster, so be
>>> it.
>>> 
>>>> It's an interesting scenario, I'll definitely give it more thought, but I
>>>> hope this helps.
>>>> Hadrian
>>>> 
>>> 
>>> You have been very helpful.  Thank you for taking the time!
>>> 
>> 
>> 
>> --
>> Willem
>> ----------------------------------
>> FuseSource
>> Web: http://www.fusesource.com
>> Blog:    http://willemjiang.blogspot.com (English)
>>         http://jnn.javaeye.com (Chinese)
>> Twitter: willemjiang
>> Weibo: willemjiang
>> 

Reply via email to