camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Claus Ibsen <claus.ib...@gmail.com>
Subject Re: slow reply for jms component when url contains replyTo
Date Wed, 13 Jul 2011 04:40:03 GMT
Hi

On Tue, Jul 12, 2011 at 10:51 PM, Jim Newsham <jnewsham@referentia.com> wrote:
> On 7/11/2011 7:25 PM, Claus Ibsen wrote:
>>
>> On Mon, Jul 11, 2011 at 10:12 PM, Jim Newsham<jnewsham@referentia.com>
>>  wrote:
>>>
>>> Hi Claus,
>>>
>>> Thanks for opening the jira issue, and for your comments.  To answer your
>>> questions:
>>>
>>> 1.  We use fixed reply-to queues which are exclusive to Camel.
>>> 2.  We need a fixed reply-to queue to avoid losing reply messages in case
>>> of
>>> disconnection (which would happen with temporary queues because they are
>>> scoped to the lifetime of the connection).
>>>
>> I think we should add an option to the JMS component so you can
>> configure that the replyTo is to be consider as exclusive.
>>
>> ?replyTo=bar&exclusiveReplyTo=true
>>
>> Something like this. Anyone got a better idea for a name of the option?
>
> That would be fine for me.  :)  I don't have any better ideas regarding the
> parameter name.
>

Okay I guess exclusiveReplyTo is a good name.
We dont want to go down with an enum in case we get a 3rd variation in
the future?
A boolean is simple to understand, so lets pick that.

>
>> Likewise I have pondered about if we should add an option to have
>> convention over configuration? So for example you can configure on the
>> jms component, a pattern of the reply to names.
>>
>> jmsComponent.setExclusiveReplyTo(true);
>> jmsComponent.setReplyToPattern("${name}.reply");
>>
>> So in this example Camel will automatic name the reply to queues, as
>> the request queue name + ".reply". So in the example above we can do
>>
>> from X
>> to("jms:queue:bar")
>> to Y
>>
>> So in this example since we configured the component with exclusive
>> reply to, and a reply to pattern as well. Then what happens is that
>> Camel will use a reply to queue named: bar.reply
>>
>>
>> Of course you can still configure all the options on the endpoint as
>> well if you like. And you can override the component settings so in
>> case you want a special reply to name you can do:
>>
>> from X
>> to("jms:queue:bar?replyTo=special")
>> to Y
>>
>> Any thoughts?
>
> This wouldn't be useful for me since I don't have a one-to-one
> correspondence between request queues and reply queues, but I can see how it
> would be useful for people who do.  Some people may want the ability to
> override the settings on a particular url, so that a temporary queue is used
> for that route.
>

Ah good idea. You could possible set that as ?replyTo= but that would be "ugly".
So we could have that enum and then people could say

replyToType=temporary
replyToType=shared
replyToType=exclusive

Now anyone got a good name for such an option?

We would need a bit validation to guard against invalid configurations such as
?replyTo=foo&replyToType=temporary

As you cannot use a fixed name for a temporary queue name.


> Jim
>
>>
>>
>>> Regards,
>>> Jim
>>>
>>> On 7/9/2011 5:52 AM, Claus Ibsen wrote:
>>>>
>>>> Hi Jim
>>>>
>>>> I have created a ticket and posted some comments about the issue
>>>> https://issues.apache.org/jira/browse/CAMEL-4202
>>>>
>>>> Are you using a fixed reply to queue that is *exclusive* to the Camel
>>>> route?
>>>> Or is the queue used for other purposes as well?
>>>>
>>>> Is there a special reason why you want to use a fixed reply to queue?
>>>>
>>>>
>>>>
>>>> On Fri, Jul 8, 2011 at 11:14 PM, Jim Newsham<jnewsham@referentia.com>
>>>>  wrote:
>>>>>
>>>>> Hi Claus,
>>>>>
>>>>> I enabled trace logging.  I'm attaching the logs (for both client and
>>>>> server; both with and without custom replyTo) as a zip file -- not sure
>>>>> if
>>>>> the mailing list will filter it, we'll see.
>>>>>
>>>>> I see that there are 5 messages in the client log which only appear
>>>>> when
>>>>> a
>>>>> custom replyTo is specified:  "Running purge task to see if any entries
>>>>> has
>>>>> been timed out", "There are 1 in the timeout map", "did not receive a
>>>>> message", etc.  Here's an excerpt from each client log, for one
>>>>> exchange:
>>>>>
>>>>>  From log for client without replyTo:
>>>>>
>>>>> 2011-07-08 10:55:32,354 [main] TRACE
>>>>> org.apache.camel.component.jms.JmsProducer - Using inOut jms template
>>>>> 2011-07-08 10:55:32,361 [main] DEBUG
>>>>> org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate -
>>>>> Executing
>>>>> callback on JMS Session: ActiveMQSession
>>>>> {id=ID:rsi-eng-newsham-61473-1310158531968-0:3:1,started=false}
>>>>> 2011-07-08 10:55:32,361 [main] TRACE
>>>>> org.apache.camel.component.jms.JmsBinding - Using JmsMessageType: Text
>>>>> 2011-07-08 10:55:32,362 [main] DEBUG
>>>>> org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate -
>>>>> Sending
>>>>> JMS message to: queue://dest with message: ActiveMQTextMessage
>>>>> {commandId
>>>>> =
>>>>> 0, responseRequired = false, messageId = null, originalDestination =
>>>>> null,
>>>>> originalTransactionId = null, producerId = null, destination = null,
>>>>> transactionId = null, expiration = 0, timestamp = 0, arrival = 0,
>>>>> brokerInTime = 0, brokerOutTime = 0, correlationId =
>>>>> ID-rsi-eng-newsham-61472-1310158530715-0-4, replyTo =
>>>>> temp-queue://ID:rsi-eng-newsham-61473-1310158531968-0:1:1, persistent
=
>>>>> false, type = null, priority = 0, groupID = null, groupSequence = 0,
>>>>> targetConsumerId = null, compressed = false, userID = null, content =
>>>>> null,
>>>>> marshalledProperties = null, dataStructure = null, redeliveryCounter
=
>>>>> 0,
>>>>> size = 0, properties = null, readOnlyProperties = false, readOnlyBody
=
>>>>> false, droppable = false, text = abc}
>>>>> 2011-07-08 10:55:32,363 [main] DEBUG
>>>>> org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate - Sent
>>>>> JMS
>>>>> message to: queue://dest with message: ActiveMQTextMessage {commandId
=
>>>>> 0,
>>>>> responseRequired = false, messageId =
>>>>> ID:rsi-eng-newsham-61473-1310158531968-0:3:1:1:1, originalDestination
=
>>>>> null, originalTransactionId = null, producerId = null, destination =
>>>>> queue://dest, transactionId = null, expiration = 1310158552362,
>>>>> timestamp
>>>>> =
>>>>> 1310158532362, arrival = 0, brokerInTime = 0, brokerOutTime = 0,
>>>>> correlationId = ID-rsi-eng-newsham-61472-1310158530715-0-4, replyTo =
>>>>> temp-queue://ID:rsi-eng-newsham-61473-1310158531968-0:1:1, persistent
=
>>>>> true, type = null, priority = 4, groupID = null, groupSequence = 0,
>>>>> targetConsumerId = null, compressed = false, userID = null, content =
>>>>> null,
>>>>> marshalledProperties = null, dataStructure = null, redeliveryCounter
=
>>>>> 0,
>>>>> size = 0, properties = null, readOnlyProperties = false, readOnlyBody
=
>>>>> false, droppable = false, text = abc}
>>>>> 2011-07-08 10:55:32,368 [DefaultMessageListenerContainer-1] DEBUG
>>>>> org.apache.camel.component.jms.reply.TemporaryQueueReplyManager -
>>>>> Received
>>>>> reply message with correlationID:
>>>>> ID-rsi-eng-newsham-61472-1310158530715-0-4
>>>>> ->    ActiveMQTextMessage {commandId = 9, responseRequired = true,
>>>>> messageId =
>>>>> ID:rsi-eng-newsham-61470-1310158525476-2:1:1:1:2, originalDestination
=
>>>>> null, originalTransactionId = null, producerId =
>>>>> ID:rsi-eng-newsham-61470-1310158525476-2:1:1:1, destination =
>>>>> temp-queue://ID:rsi-eng-newsham-61473-1310158531968-0:1:1,
>>>>> transactionId
>>>>> =
>>>>> null, expiration = 0, timestamp = 1310158532367, arrival = 0,
>>>>> brokerInTime =
>>>>> 1310158532367, brokerOutTime = 1310158532367, correlationId =
>>>>> ID-rsi-eng-newsham-61472-1310158530715-0-4, replyTo = null, persistent
>>>>> =
>>>>> true, type = null, priority = 4, groupID = null, groupSequence = 0,
>>>>> targetConsumerId = null, compressed = false, userID = null, content =
>>>>> null,
>>>>> marshalledProperties = null, dataStructure = null, redeliveryCounter
=
>>>>> 0,
>>>>> size = 0, properties = null, readOnlyProperties = true, readOnlyBody
=
>>>>> true,
>>>>> droppable = false, text = reply}
>>>>> 2011-07-08 10:55:32,369 [DefaultMessageListenerContainer-1] TRACE
>>>>> org.apache.camel.component.jms.JmsBinding - Extracting body as a
>>>>> TextMessage
>>>>> from JMS message: ActiveMQTextMessage {commandId = 9, responseRequired
>>>>> =
>>>>> true, messageId = ID:rsi-eng-newsham-61470-1310158525476-2:1:1:1:2,
>>>>> originalDestination = null, originalTransactionId = null, producerId
=
>>>>> ID:rsi-eng-newsham-61470-1310158525476-2:1:1:1, destination =
>>>>> temp-queue://ID:rsi-eng-newsham-61473-1310158531968-0:1:1,
>>>>> transactionId
>>>>> =
>>>>> null, expiration = 0, timestamp = 1310158532367, arrival = 0,
>>>>> brokerInTime =
>>>>> 1310158532367, brokerOutTime = 1310158532367, correlationId =
>>>>> ID-rsi-eng-newsham-61472-1310158530715-0-4, replyTo = null, persistent
>>>>> =
>>>>> true, type = null, priority = 4, groupID = null, groupSequence = 0,
>>>>> targetConsumerId = null, compressed = false, userID = null, content =
>>>>> null,
>>>>> marshalledProperties = null, dataStructure = null, redeliveryCounter
=
>>>>> 0,
>>>>> size = 0, properties = null, readOnlyProperties = true, readOnlyBody
=
>>>>> true,
>>>>> droppable = false, text = reply}
>>>>> 2011-07-08 10:55:32,369 [DefaultMessageListenerContainer-1] DEBUG
>>>>> org.apache.camel.component.jms.reply.TemporaryQueueReplyManager - Reply
>>>>> received. Setting reply as OUT message: reply
>>>>> received reply in: 0.015 s
>>>>>
>>>>>  From log for client with replyTo:
>>>>>
>>>>> 2011-07-08 10:52:10,075 [main] TRACE
>>>>> org.apache.camel.component.jms.JmsProducer - Using inOut jms template
>>>>> 2011-07-08 10:52:10,081 [main] DEBUG
>>>>> org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate -
>>>>> Executing
>>>>> callback on JMS Session: ActiveMQSession
>>>>> {id=ID:rsi-eng-newsham-61455-1310158328671-0:3:1,started=false}
>>>>> 2011-07-08 10:52:10,082 [main] TRACE
>>>>> org.apache.camel.component.jms.JmsBinding - Using JmsMessageType: Text
>>>>> 2011-07-08 10:52:10,082 [main] DEBUG
>>>>> org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate -
>>>>> Sending
>>>>> JMS message to: queue://dest with message: ActiveMQTextMessage
>>>>> {commandId
>>>>> =
>>>>> 0, responseRequired = false, messageId = null, originalDestination =
>>>>> null,
>>>>> originalTransactionId = null, producerId = null, destination = null,
>>>>> transactionId = null, expiration = 0, timestamp = 0, arrival = 0,
>>>>> brokerInTime = 0, brokerOutTime = 0, correlationId =
>>>>> ID-rsi-eng-newsham-61454-1310158327407-0-4, replyTo =
>>>>> queue://replyQueue,
>>>>> persistent = false, type = null, priority = 0, groupID = null,
>>>>> groupSequence
>>>>> = 0, targetConsumerId = null, compressed = false, userID = null,
>>>>> content
>>>>> =
>>>>> null, marshalledProperties = null, dataStructure = null,
>>>>> redeliveryCounter =
>>>>> 0, size = 0, properties = null, readOnlyProperties = false,
>>>>> readOnlyBody
>>>>> =
>>>>> false, droppable = false, text = abc}
>>>>> 2011-07-08 10:52:10,083 [main] DEBUG
>>>>> org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate - Sent
>>>>> JMS
>>>>> message to: queue://dest with message: ActiveMQTextMessage {commandId
=
>>>>> 0,
>>>>> responseRequired = false, messageId =
>>>>> ID:rsi-eng-newsham-61455-1310158328671-0:3:1:1:1, originalDestination
=
>>>>> null, originalTransactionId = null, producerId = null, destination =
>>>>> queue://dest, transactionId = null, expiration = 1310158350082,
>>>>> timestamp
>>>>> =
>>>>> 1310158330082, arrival = 0, brokerInTime = 0, brokerOutTime = 0,
>>>>> correlationId = ID-rsi-eng-newsham-61454-1310158327407-0-4, replyTo =
>>>>> queue://replyQueue, persistent = true, type = null, priority = 4,
>>>>> groupID
>>>>> =
>>>>> null, groupSequence = 0, targetConsumerId = null, compressed = false,
>>>>> userID
>>>>> = null, content = null, marshalledProperties = null, dataStructure =
>>>>> null,
>>>>> redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties
>>>>> =
>>>>> false, readOnlyBody = false, droppable = false, text = abc}
>>>>> 2011-07-08 10:52:10,536 [Camel (camel-1) thread #0 -
>>>>> JmsReplyManagerTimeoutChecker[dest] TRACE
>>>>> org.apache.camel.component.jms.reply.CorrelationMap - Running purge
>>>>> task
>>>>> to
>>>>> see if any entries has been timed out
>>>>> 2011-07-08 10:52:10,536 [Camel (camel-1) thread #0 -
>>>>> JmsReplyManagerTimeoutChecker[dest] TRACE
>>>>> org.apache.camel.component.jms.reply.CorrelationMap - There are 1 in
>>>>> the
>>>>> timeout map
>>>>> 2011-07-08 10:52:11,075 [DefaultMessageListenerContainer-1] DEBUG
>>>>>
>>>>>
>>>>> org.apache.camel.component.jms.reply.PersistentQueueReplyManager$PersistentQueueMessageListenerContainer
>>>>> - Consumer [ActiveMQMessageConsumer {
>>>>> value=ID:rsi-eng-newsham-61455-1310158328671-0:1:1:3, started=true }]
>>>>> of
>>>>> session [ActiveMQSession
>>>>> {id=ID:rsi-eng-newsham-61455-1310158328671-0:1:1,started=true}] did not
>>>>> receive a message
>>>>> 2011-07-08 10:52:11,075 [DefaultMessageListenerContainer-1] TRACE
>>>>> org.apache.camel.component.jms.reply.PersistentQueueReplyManager -
>>>>> Using
>>>>>
>>>>>
>>>>> MessageSelector[JMSCorrelationID='ID-rsi-eng-newsham-61454-1310158327407-0-4']
>>>>> 2011-07-08 10:52:11,078 [DefaultMessageListenerContainer-1] DEBUG
>>>>>
>>>>>
>>>>> org.apache.camel.component.jms.reply.PersistentQueueReplyManager$PersistentQueueMessageListenerContainer
>>>>> - Received message of type [class
>>>>> org.apache.activemq.command.ActiveMQTextMessage] from consumer
>>>>> [ActiveMQMessageConsumer {
>>>>> value=ID:rsi-eng-newsham-61455-1310158328671-0:1:1:4, started=true }]
>>>>> of
>>>>> session [ActiveMQSession
>>>>> {id=ID:rsi-eng-newsham-61455-1310158328671-0:1:1,started=true}]
>>>>> 2011-07-08 10:52:11,078 [DefaultMessageListenerContainer-1] DEBUG
>>>>> org.apache.camel.component.jms.reply.PersistentQueueReplyManager -
>>>>> Received
>>>>> reply message with correlationID:
>>>>> ID-rsi-eng-newsham-61454-1310158327407-0-4
>>>>> ->    ActiveMQTextMessage {commandId = 9, responseRequired = true,
>>>>> messageId =
>>>>> ID:rsi-eng-newsham-61452-1310158320230-2:1:1:1:2, originalDestination
=
>>>>> null, originalTransactionId = null, producerId =
>>>>> ID:rsi-eng-newsham-61452-1310158320230-2:1:1:1, destination =
>>>>> queue://replyQueue, transactionId = null, expiration = 0, timestamp =
>>>>> 1310158330085, arrival = 0, brokerInTime = 1310158330085, brokerOutTime
>>>>> =
>>>>> 1310158331077, correlationId =
>>>>> ID-rsi-eng-newsham-61454-1310158327407-0-4,
>>>>> replyTo = null, persistent = true, type = null, priority = 4, groupID
=
>>>>> null, groupSequence = 0, targetConsumerId = null, compressed = false,
>>>>> userID
>>>>> = null, content = null, marshalledProperties = null, dataStructure =
>>>>> null,
>>>>> redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties
>>>>> =
>>>>> true, readOnlyBody = true, droppable = false, text = reply}
>>>>> 2011-07-08 10:52:11,078 [DefaultMessageListenerContainer-1] TRACE
>>>>> org.apache.camel.component.jms.JmsBinding - Extracting body as a
>>>>> TextMessage
>>>>> from JMS message: ActiveMQTextMessage {commandId = 9, responseRequired
>>>>> =
>>>>> true, messageId = ID:rsi-eng-newsham-61452-1310158320230-2:1:1:1:2,
>>>>> originalDestination = null, originalTransactionId = null, producerId
=
>>>>> ID:rsi-eng-newsham-61452-1310158320230-2:1:1:1, destination =
>>>>> queue://replyQueue, transactionId = null, expiration = 0, timestamp =
>>>>> 1310158330085, arrival = 0, brokerInTime = 1310158330085, brokerOutTime
>>>>> =
>>>>> 1310158331077, correlationId =
>>>>> ID-rsi-eng-newsham-61454-1310158327407-0-4,
>>>>> replyTo = null, persistent = true, type = null, priority = 4, groupID
=
>>>>> null, groupSequence = 0, targetConsumerId = null, compressed = false,
>>>>> userID
>>>>> = null, content = null, marshalledProperties = null, dataStructure =
>>>>> null,
>>>>> redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties
>>>>> =
>>>>> true, readOnlyBody = true, droppable = false, text = reply}
>>>>> 2011-07-08 10:52:11,078 [DefaultMessageListenerContainer-1] DEBUG
>>>>> org.apache.camel.component.jms.reply.PersistentQueueReplyManager -
>>>>> Reply
>>>>> received. Setting reply as OUT message: reply
>>>>> received reply in: 1.004 s
>>>>>
>>>>> Thanks,
>>>>> Jim
>>>>>
>>>>>
>>>>>
>>>>> On 7/7/2011 10:59 PM, Claus Ibsen wrote:
>>>>>>
>>>>>> Can you enable TRACE logging at org.apache.camel.component.jms and
run
>>>>>> it for both examples.
>>>>>> To see what happens.
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Fri, Jul 8, 2011 at 3:18 AM, Jim Newsham<jnewsham@referentia.com>
>>>>>>  wrote:
>>>>>>>
>>>>>>> I'm using Camel 2.7.1 on top of ActiveMQ 5.5.0.  For some reason,
>>>>>>> when
>>>>>>> I
>>>>>>> specify a custom replyTo destination on the endpoint url, the
time it
>>>>>>> takes
>>>>>>> for the producer to receive a reply increases drastically.  The
>>>>>>> curious
>>>>>>> thing is that the time to receive a reply is almost exactly 1
second.
>>>>>>>  When
>>>>>>> I remove the replyTo from the url, everything's fast again.
>>>>>>>
>>>>>>> I created a very simple, stand-alone test to demonstrate what
I'm
>>>>>>> seeing.
>>>>>>>  There is a server class [4] which runs an embedded instance
of
>>>>>>> ActiveMQ
>>>>>>> and
>>>>>>> simply replies to messages as they arrive; and a client [3] class
>>>>>>> which
>>>>>>> simply sends messages to the server, and prints the elapsed time.
>>>>>>>  The
>>>>>>> USE_REPLY_TO symbolic constant in the client determines whether
a
>>>>>>> replyTo
>>>>>>> value is added to the url or not.
>>>>>>>
>>>>>>> The client output when USE_REPLY_TO is false is shown as [1].
 The
>>>>>>> client
>>>>>>> output when USE_REPLY_TO is true is shown as [2].  The code
is pretty
>>>>>>> trivial.  Am I doing something wrong, or is this a Camel and/or
>>>>>>> ActiveMQ
>>>>>>> issue?
>>>>>>>
>>>>>>> Thanks!
>>>>>>> Jim
>>>>>>>
>>>>>>>
>>>>>>> [1] USE_REPLY_TO = false
>>>>>>>
>>>>>>> received reply in: 0.476 s
>>>>>>> received reply in: 0.006 s
>>>>>>> received reply in: 0.006 s
>>>>>>> received reply in: 0.006 s
>>>>>>> received reply in: 0.006 s
>>>>>>> ...
>>>>>>>
>>>>>>>
>>>>>>> [2] USE_REPLY_TO = true
>>>>>>>
>>>>>>> received reply in: 1.524 s
>>>>>>> received reply in: 1.002 s
>>>>>>> received reply in: 1.003 s
>>>>>>> received reply in: 1.003 s
>>>>>>> received reply in: 1.002 s
>>>>>>> ...
>>>>>>>
>>>>>>>
>>>>>>> [3] TestReplyToClient.java
>>>>>>>
>>>>>>> package test;
>>>>>>>
>>>>>>> import org.apache.activemq.ActiveMQConnectionFactory;
>>>>>>> import org.apache.activemq.camel.component.ActiveMQComponent;
>>>>>>> import org.apache.camel.CamelContext;
>>>>>>> import org.apache.camel.ProducerTemplate;
>>>>>>> import org.apache.camel.impl.DefaultCamelContext;
>>>>>>>
>>>>>>> public class TestReplyToClient {
>>>>>>>
>>>>>>>  private static final boolean USE_REPLY_TO = false;
>>>>>>>
>>>>>>>  public static void main(String... args) throws Exception {
>>>>>>>    // create camel context; configure activemq component for
>>>>>>> tcp://localhost:7001
>>>>>>>    CamelContext context = new DefaultCamelContext();
>>>>>>>    ActiveMQComponent activemqComponent =
>>>>>>> ActiveMQComponent.activeMQComponent();
>>>>>>>    activemqComponent.setConnectionFactory(new
>>>>>>> ActiveMQConnectionFactory(
>>>>>>>      null, null, "tcp://localhost:7001"));
>>>>>>>    context.addComponent("activemq", activemqComponent);
>>>>>>>    context.start();
>>>>>>>
>>>>>>>    // define url to send requests to
>>>>>>>    String sendUrl = "activemq:queue:dest";
>>>>>>>    if (USE_REPLY_TO) {
>>>>>>>      sendUrl += "?replyTo=replyQueue";
>>>>>>>    }
>>>>>>>    System.err.println("sending to url: " + sendUrl);
>>>>>>>
>>>>>>>    // repeatedly send requests; measure elapsed time
>>>>>>>    ProducerTemplate template = context.createProducerTemplate();
>>>>>>>    while (true) {
>>>>>>>      long startNanos = System.nanoTime();
>>>>>>>      template.requestBody(sendUrl, "abc");
>>>>>>>      long elapsedNanos = System.nanoTime() - startNanos;
>>>>>>>      System.err.println(String.format("received reply in:
%.3f s",
>>>>>>> elapsedNanos / 1000000000.0));
>>>>>>>    }
>>>>>>>  }
>>>>>>>
>>>>>>> }
>>>>>>>
>>>>>>>
>>>>>>> [4] TestReplyToServer.java
>>>>>>>
>>>>>>> package test;
>>>>>>>
>>>>>>> import org.apache.activemq.broker.BrokerService;
>>>>>>> import org.apache.activemq.camel.component.ActiveMQComponent;
>>>>>>> import org.apache.camel.CamelContext;
>>>>>>> import org.apache.camel.Exchange;
>>>>>>> import org.apache.camel.Processor;
>>>>>>> import org.apache.camel.builder.RouteBuilder;
>>>>>>> import org.apache.camel.impl.DefaultCamelContext;
>>>>>>>
>>>>>>> public class TestReplyToServer {
>>>>>>>
>>>>>>>  private static final String BROKER_NAME = "thebroker";
>>>>>>>
>>>>>>>  public static void main(String... args) throws Exception {
>>>>>>>    startBroker();
>>>>>>>    startCamel();
>>>>>>>    Thread.sleep(Long.MAX_VALUE);
>>>>>>>  }
>>>>>>>
>>>>>>>  private static void startBroker() throws Exception {
>>>>>>>    BrokerService brokerService = new BrokerService();
>>>>>>>    brokerService.setBrokerName(BROKER_NAME);
>>>>>>>    brokerService.setSchedulerSupport(false);
>>>>>>>    brokerService.setPersistent(false);
>>>>>>>    brokerService.addConnector("tcp://0.0.0.0:7001");
>>>>>>>    brokerService.start();
>>>>>>>    brokerService.waitUntilStarted();
>>>>>>>  }
>>>>>>>
>>>>>>>
>>>>>>>  private static void startCamel() throws Exception {
>>>>>>>    CamelContext context = new DefaultCamelContext();
>>>>>>>
>>>>>>>    ActiveMQComponent activemqComponent =
>>>>>>> ActiveMQComponent.activeMQComponent();
>>>>>>>
>>>>>>>  activemqComponent.setBrokerURL(String.format("vm://%s?create=false",
>>>>>>> BROKER_NAME));
>>>>>>>    context.addComponent("activemq", activemqComponent);
>>>>>>>
>>>>>>>    final String receiveUrl = "activemq:queue:dest";
>>>>>>>    context.addRoutes(new RouteBuilder() {
>>>>>>>      @Override
>>>>>>>      public void configure() throws Exception {
>>>>>>>        from(receiveUrl).process(new Processor() {
>>>>>>>          @Override
>>>>>>>          public void process(Exchange exchange) throws Exception
{
>>>>>>>            System.err.println("received request");
>>>>>>>            exchange.getOut().setBody("reply");
>>>>>>>          }
>>>>>>>        });
>>>>>>>      }
>>>>>>>    });
>>>>>>>
>>>>>>>    context.start();
>>>>>>>    System.err.println("listening on url: " + receiveUrl);
>>>>>>>  }
>>>>>>>
>>>>>>> }
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>
>>>
>>
>>
>
>



-- 
Claus Ibsen
-----------------
FuseSource
Email: cibsen@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Mime
View raw message