Hi,
Did you try to use the multicast?
Here is the example codes of multicast , thread A will wait for the
response back and finishing the response aggregation.
// Router 1 to call the bank endpoints sequentially
from(Constants.LOANBROKER_URI)
// Using the CreditScoreProcessor to call the credit agency service
.process(new CreditScoreProcessor(Constants.CREDITAGENCY_ADDRESS))
// Set the aggregation strategy on the multicast pattern
.multicast(new BankResponseAggregationStrategy())
// Send out the request the below three different banks
sequentially
.to(Constants.BANK1_URI, Constants.BANK2_URI,
Constants.BANK3_URI);
// Router 2 to call the bank endpoints parallelly
from(Constants.PARALLEL_LOANBROKER_URI)
.process(new CreditScoreProcessor(Constants.CREDITAGENCY_ADDRESS))
// Using the thread pool to send out message to the below three
different banks parallelly
.multicast(new BankResponseAggregationStrategy())
// Camel will create a thread pool with the size of the send
to endpoints
// for sending the message parallelly
.setParallelProcessing(true)
.to(Constants.BANK1_URI, Constants.BANK2_URI,
Constants.BANK3_URI);
You can find more information about this loan broker example here[1]
[1] http://activemq.apache.org/camel/loan-broker-example.html
Willem
GLD wrote:
> I didn't see this property.
> By the way, the setter is JmsConfiguration.setReplyTo().
> ==>
> <to
> uri="jms:queue:${request.queue}?replyToDestination=queue:${reply.queue}"/>
> Fails
> <to uri="jms:queue:${request.queue}?replyTo=queue:${reply.queue}"/> is
> OK.
>
> =====
> And just for my personal knowledge, In an InOut Pattern, consuming a message
> (in thread A), how do you
> - send 2 Messages (InOut) at the same time
> - make the Thread A wait for the 2 responses
> - continue the initial route
>
> send request receive reply
> thread A /------------ ..... -----------\ aggregate
> responses
> ==> Endpoint ------<
>> ---------------------- ..... continue
> \------------ ..... -----------/
>
> or
>
> thread A Send Asynch Wait for the 2
> aggregate
> ==> Endpoint ------ Req 1 &2 ----- asynch Responses -- responses
> --------- ..... continue
>
>
> Regards
>
>
> willem.jiang wrote:
>> +1 for Christian's solution.
>> For the WS the communication model is a request/response, so the message
>> exchange pattern is InOut. Current camel jms component does not only
>> support InOnly pattern, but also support InOut pattern.
>>
>> Willem
>>
>> Christian Schneider wrote:
>>> Your config looks extremely complex.
>>>
>>> Shouldn´t a simple
>>>
>>> <from uri="direct:myEndpoint"/>
>>> <to
>>> uri="jms:queue:${request.queue.jndi-name}?replyToDestination=queue:${reply.queue.jndi-name}"/>
>>>
>>>
>>> suffice?
>>>
>>> As far as I know it will do a nice request / reply with correlation id
>>> processing.
>>>
>>> Greetings
>>>
>>> Christian
>>>
>>> GLD schrieb:
>>>> Hi, I try to implement the following use case
>>>>
>>>> A Direct-endpoint consumes data ==> request data is sent the
>>>> request via JMS in queue "requestQueue" AND the reply is expected on
>>>> the queue "responseQueue" ==> The reply is then sent back tot
>>>> the direct-endpoint
>>>>
>>>>
>>>> I tried to add a correlationID to the request=)
>>>> use a multicast tag (to send the JMS message) and to prepare a join
>>>> point
>>>> for the reply. In the second exchange, I set the header 'isReply' to
>>>> false.
>>>> In the route consuming the JMS reply from queue "responseQueue", I set
>>>> the
>>>> header 'isReply' to 'true' (so 1 has isReply to true and the other to
>>>> false).
>>>> I tried to use an aggregator to join both exhanges above sending them
>>>> to the
>>>> same direct endpoint.
>>>> The matching is done via the JMScorrelationID
>>>> The choice is done by a custom strategy (The Selected exchange is
>>>> the one
>>>> where 'isReply = true'
>>>>
>>>> (see route file attached
>>>> http://www.nabble.com/file/p20900905/applicationContext-business-camel-route.xml
>>>>
>>>> applicationContext-business-camel-route.xml
>>>>
>>>> ... But it doesn't work.
>>>> My expected "join point" doesn't wait for the reply.... and the
>>>> request is
>>>> sent back to the "Direct-endpoint":-(
>>>>
>>>>
>>>> What is the good solution to make the thread that process the original
>>>> message wait for a message processed by another thread?
>>>>
>>>> NB : One of my requirements is to use 2 queues. I did it with 1 queue
>>>> (InOut) and it works fine.=)
>>>>
>>>> Regards
>>>>
>>>>
>>>
>>
>>
>