You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2012/11/21 10:08:52 UTC

svn commit: r1412023 - in /camel/branches/camel-2.10.x: ./ components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/ components/camel-jms/src/test/java/org/apache/camel/component/jms/

Author: davsclaus
Date: Wed Nov 21 09:08:52 2012
New Revision: 1412023

URL: http://svn.apache.org/viewvc?rev=1412023&view=rev
Log:
CAMEL-5809: camel-jms request/reply over JMS allow to use concurrentConsumers/maxConcurrentConsumers options.

Added:
    camel/branches/camel-2.10.x/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyExclusiveReplyToConcurrentTest.java
      - copied unchanged from r1411664, camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyExclusiveReplyToConcurrentTest.java
Modified:
    camel/branches/camel-2.10.x/   (props changed)
    camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/MessageSelectorCreator.java
    camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/PersistentQueueReplyManager.java
    camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/TemporaryQueueReplyManager.java

Propchange: camel/branches/camel-2.10.x/
------------------------------------------------------------------------------
  Merged /camel/trunk:r1411664

Propchange: camel/branches/camel-2.10.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/MessageSelectorCreator.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/MessageSelectorCreator.java?rev=1412023&r1=1412022&r2=1412023&view=diff
==============================================================================
--- camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/MessageSelectorCreator.java (original)
+++ camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/MessageSelectorCreator.java Wed Nov 21 09:08:52 2012
@@ -29,7 +29,7 @@ public class MessageSelectorCreator impl
     protected static final Logger LOG = LoggerFactory.getLogger(MessageSelectorCreator.class);
     protected final CorrelationTimeoutMap timeoutMap;
     protected final ConcurrentSkipListSet<String> correlationIds;
-    protected boolean dirty = true;
+    protected volatile boolean dirty = true;
     protected StringBuilder expression;
 
     public MessageSelectorCreator(CorrelationTimeoutMap timeoutMap) {

Modified: camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/PersistentQueueReplyManager.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/PersistentQueueReplyManager.java?rev=1412023&r1=1412022&r2=1412023&view=diff
==============================================================================
--- camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/PersistentQueueReplyManager.java (original)
+++ camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/PersistentQueueReplyManager.java Wed Nov 21 09:08:52 2012
@@ -174,8 +174,10 @@ public class PersistentQueueReplyManager
         answer.setMessageListener(this);
         answer.setPubSubDomain(false);
         answer.setSubscriptionDurable(false);
-        answer.setConcurrentConsumers(1);
-        answer.setMaxConcurrentConsumers(1);
+        answer.setConcurrentConsumers(endpoint.getConcurrentConsumers());
+        if (endpoint.getMaxConcurrentConsumers() > 0) {
+            answer.setMaxConcurrentConsumers(endpoint.getMaxConcurrentConsumers());
+        }
         answer.setConnectionFactory(endpoint.getConnectionFactory());
         String clientId = endpoint.getClientId();
         if (clientId != null) {
@@ -205,8 +207,20 @@ public class PersistentQueueReplyManager
 
         // setup a bean name which is used ny Spring JMS as the thread name
         String name = "PersistentQueueReplyManager[" + answer.getDestinationName() + "]";
-        name = endpoint.getCamelContext().getExecutorServiceManager().resolveThreadName(name);
-        answer.setBeanName(name);
+        String beanName = endpoint.getCamelContext().getExecutorServiceManager().resolveThreadName(name);
+        answer.setBeanName(beanName);
+
+        if (answer.getConcurrentConsumers() > 1) {
+            if (ReplyToType.Shared == type) {
+                // warn if using concurrent consumer with shared reply queue as that may not work properly
+                log.warn("Using {}-{} concurrent consumer on {} with shared queue {} may not work properly with all message brokers.",
+                        new Object[]{answer.getConcurrentConsumers(), answer.getMaxConcurrentConsumers(), name, endpoint.getReplyTo()});
+            } else {
+                // log that we are using concurrent consumers
+                log.info("Using {}-{} concurrent consumers on {}",
+                        new Object[]{answer.getConcurrentConsumers(), answer.getMaxConcurrentConsumers(), name});
+            }
+        }
 
         return answer;
     }

Modified: camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/TemporaryQueueReplyManager.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/TemporaryQueueReplyManager.java?rev=1412023&r1=1412022&r2=1412023&view=diff
==============================================================================
--- camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/TemporaryQueueReplyManager.java (original)
+++ camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/TemporaryQueueReplyManager.java Wed Nov 21 09:08:52 2012
@@ -102,8 +102,10 @@ public class TemporaryQueueReplyManager 
         answer.setMessageListener(this);
         answer.setPubSubDomain(false);
         answer.setSubscriptionDurable(false);
-        answer.setConcurrentConsumers(1);
-        answer.setMaxConcurrentConsumers(1);
+        answer.setConcurrentConsumers(endpoint.getConcurrentConsumers());
+        if (endpoint.getMaxConcurrentConsumers() > 0) {
+            answer.setMaxConcurrentConsumers(endpoint.getMaxConcurrentConsumers());
+        }
         answer.setConnectionFactory(endpoint.getConnectionFactory());
         String clientId = endpoint.getClientId();
         if (clientId != null) {
@@ -133,9 +135,14 @@ public class TemporaryQueueReplyManager 
 
         // setup a bean name which is used ny Spring JMS as the thread name
         String name = "TemporaryQueueReplyManager[" + answer.getDestinationName() + "]";
-        name = endpoint.getCamelContext().getExecutorServiceManager().resolveThreadName(name);
-        answer.setBeanName(name);
+        String beanName = endpoint.getCamelContext().getExecutorServiceManager().resolveThreadName(name);
+        answer.setBeanName(beanName);
 
+        if (answer.getConcurrentConsumers() > 1) {
+            // log that we are using concurrent consumers
+            log.info("Using {}-{} concurrent consumers on {}",
+                    new Object[]{answer.getConcurrentConsumers(), answer.getMaxConcurrentConsumers(), name});
+        }
         return answer;
     }