This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
commit a846e6f6ca6b6ab36ae5908967910d6e3792d96f Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Thu Jan 21 07:53:02 2021 +0100 [CAMEL-16008] Implement consumer priority in camel --- .../apache/camel/catalog/docs/jms-component.adoc | 6 +- .../component/jms/JmsComponentConfigurer.java | 6 ++ .../camel/component/jms/JmsEndpointConfigurer.java | 6 ++ .../camel/component/jms/JmsEndpointUriFactory.java | 83 +++++++++++----------- .../org/apache/camel/component/jms/jms.json | 2 + .../camel-jms/src/main/docs/jms-component.adoc | 5 +- .../apache/camel/component/jms/JmsComponent.java | 8 +++ .../camel/component/jms/JmsConfiguration.java | 35 +++++---- .../apache/camel/component/jms/JmsEndpoint.java | 66 ++--------------- .../apache/camel/component/jms/JmsProducer.java | 6 -- .../camel/component/jms/JmsQueueEndpoint.java | 7 -- .../component/jms/JmsTemporaryQueueEndpoint.java | 7 -- .../component/jms/JmsTemporaryTopicEndpoint.java | 7 -- .../jms/JmsEndpointConfigurationTest.java | 1 - .../component/dsl/JmsComponentBuilderFactory.java | 25 +++++++ .../endpoint/dsl/JmsEndpointBuilderFactory.java | 48 +++++++++++++ .../modules/ROOT/pages/jms-component.adoc | 6 +- 17 files changed, 170 insertions(+), 154 deletions(-) diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/jms-component.adoc b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/jms-component.adoc index f370065..67a4063 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/jms-component.adoc +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/jms-component.adoc @@ -187,7 +187,7 @@ about these properties by consulting the relevant Spring documentation. // component options: START -The JMS component supports 97 options, which are listed below. +The JMS component supports 98 options, which are listed below. @@ -202,6 +202,7 @@ The JMS component supports 97 options, which are listed below. | *replyTo* (common) | Provides an explicit ReplyTo destination (overrides any incoming value of Message.getJMSReplyTo() in consumer). | | String | *testConnectionOnStartup* (common) | Specifies whether to test the connection on startup. This ensures that when Camel starts that all the JMS consumers have a valid connection to the JMS broker. If a connection cannot be granted then Camel throws an exception on startup. This ensures that Camel is not started with failed connections. The JMS producers is tested as well. | false | boolean | *acknowledgementModeName* (consumer) | The JMS acknowledgement name, which is one of: SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE. There are 4 enums and the value can be one of: SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE | AUTO_ACKNOWLEDGE | String +| *artemisConsumerPriority* (consumer) | Consumer priorities allow you to ensure that high priority consumers receive messages while they are active. Normally, active consumers connected to a queue receive messages from it in a round-robin fashion. When consumer priorities are in use, messages are delivered round-robin if multiple active consumers exist with the same high priority. Messages will only going to lower priority consumers when the high priority consumers do not have credit av [...] | *asyncConsumer* (consumer) | Whether the JmsConsumer processes the Exchange asynchronously. If enabled then the JmsConsumer may pickup the next message from the JMS queue, while the previous message is being processed asynchronously (by the Asynchronous Routing Engine). This means that messages may be processed not 100% strictly in order. If disabled (as default) then the Exchange is fully processed before the JmsConsumer will pickup the next message from the JMS queue. Note if transac [...] | *autoStartup* (consumer) | Specifies whether the consumer container should auto-startup. | true | boolean | *cacheLevel* (consumer) | Sets the cache level by ID for the underlying JMS resources. See cacheLevelName option for more details. | | int @@ -331,7 +332,7 @@ with the following path and query parameters: |=== -=== Query Parameters (94 parameters): +=== Query Parameters (95 parameters): [width="100%",cols="2,5,^1,2",options="header"] @@ -345,6 +346,7 @@ with the following path and query parameters: | *replyTo* (common) | Provides an explicit ReplyTo destination (overrides any incoming value of Message.getJMSReplyTo() in consumer). | | String | *testConnectionOnStartup* (common) | Specifies whether to test the connection on startup. This ensures that when Camel starts that all the JMS consumers have a valid connection to the JMS broker. If a connection cannot be granted then Camel throws an exception on startup. This ensures that Camel is not started with failed connections. The JMS producers is tested as well. | false | boolean | *acknowledgementModeName* (consumer) | The JMS acknowledgement name, which is one of: SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE. There are 4 enums and the value can be one of: SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE | AUTO_ACKNOWLEDGE | String +| *artemisConsumerPriority* (consumer) | Consumer priorities allow you to ensure that high priority consumers receive messages while they are active. Normally, active consumers connected to a queue receive messages from it in a round-robin fashion. When consumer priorities are in use, messages are delivered round-robin if multiple active consumers exist with the same high priority. Messages will only going to lower priority consumers when the high priority consumers do not have credit av [...] | *asyncConsumer* (consumer) | Whether the JmsConsumer processes the Exchange asynchronously. If enabled then the JmsConsumer may pickup the next message from the JMS queue, while the previous message is being processed asynchronously (by the Asynchronous Routing Engine). This means that messages may be processed not 100% strictly in order. If disabled (as default) then the Exchange is fully processed before the JmsConsumer will pickup the next message from the JMS queue. Note if transac [...] | *autoStartup* (consumer) | Specifies whether the consumer container should auto-startup. | true | boolean | *cacheLevel* (consumer) | Sets the cache level by ID for the underlying JMS resources. See cacheLevelName option for more details. | | int diff --git a/components/camel-jms/src/generated/java/org/apache/camel/component/jms/JmsComponentConfigurer.java b/components/camel-jms/src/generated/java/org/apache/camel/component/jms/JmsComponentConfigurer.java index 36c0add..9c65744 100644 --- a/components/camel-jms/src/generated/java/org/apache/camel/component/jms/JmsComponentConfigurer.java +++ b/components/camel-jms/src/generated/java/org/apache/camel/component/jms/JmsComponentConfigurer.java @@ -46,6 +46,8 @@ public class JmsComponentConfigurer extends PropertyConfigurerSupport implements case "allowSerializedHeaders": getOrCreateConfiguration(target).setAllowSerializedHeaders(property(camelContext, boolean.class, value)); return true; case "alwayscopymessage": case "alwaysCopyMessage": getOrCreateConfiguration(target).setAlwaysCopyMessage(property(camelContext, boolean.class, value)); return true; + case "artemisconsumerpriority": + case "artemisConsumerPriority": getOrCreateConfiguration(target).setArtemisConsumerPriority(property(camelContext, int.class, value)); return true; case "artemisstreamingenabled": case "artemisStreamingEnabled": getOrCreateConfiguration(target).setArtemisStreamingEnabled(property(camelContext, boolean.class, value)); return true; case "asyncconsumer": @@ -240,6 +242,8 @@ public class JmsComponentConfigurer extends PropertyConfigurerSupport implements case "allowSerializedHeaders": return boolean.class; case "alwayscopymessage": case "alwaysCopyMessage": return boolean.class; + case "artemisconsumerpriority": + case "artemisConsumerPriority": return int.class; case "artemisstreamingenabled": case "artemisStreamingEnabled": return boolean.class; case "asyncconsumer": @@ -435,6 +439,8 @@ public class JmsComponentConfigurer extends PropertyConfigurerSupport implements case "allowSerializedHeaders": return getOrCreateConfiguration(target).isAllowSerializedHeaders(); case "alwayscopymessage": case "alwaysCopyMessage": return getOrCreateConfiguration(target).isAlwaysCopyMessage(); + case "artemisconsumerpriority": + case "artemisConsumerPriority": return getOrCreateConfiguration(target).getArtemisConsumerPriority(); case "artemisstreamingenabled": case "artemisStreamingEnabled": return getOrCreateConfiguration(target).isArtemisStreamingEnabled(); case "asyncconsumer": diff --git a/components/camel-jms/src/generated/java/org/apache/camel/component/jms/JmsEndpointConfigurer.java b/components/camel-jms/src/generated/java/org/apache/camel/component/jms/JmsEndpointConfigurer.java index e76ea0f..5e2d277 100644 --- a/components/camel-jms/src/generated/java/org/apache/camel/component/jms/JmsEndpointConfigurer.java +++ b/components/camel-jms/src/generated/java/org/apache/camel/component/jms/JmsEndpointConfigurer.java @@ -35,6 +35,8 @@ public class JmsEndpointConfigurer extends PropertyConfigurerSupport implements case "allowSerializedHeaders": target.getConfiguration().setAllowSerializedHeaders(property(camelContext, boolean.class, value)); return true; case "alwayscopymessage": case "alwaysCopyMessage": target.getConfiguration().setAlwaysCopyMessage(property(camelContext, boolean.class, value)); return true; + case "artemisconsumerpriority": + case "artemisConsumerPriority": target.getConfiguration().setArtemisConsumerPriority(property(camelContext, int.class, value)); return true; case "artemisstreamingenabled": case "artemisStreamingEnabled": target.getConfiguration().setArtemisStreamingEnabled(property(camelContext, boolean.class, value)); return true; case "asyncconsumer": @@ -224,6 +226,8 @@ public class JmsEndpointConfigurer extends PropertyConfigurerSupport implements case "allowSerializedHeaders": return boolean.class; case "alwayscopymessage": case "alwaysCopyMessage": return boolean.class; + case "artemisconsumerpriority": + case "artemisConsumerPriority": return int.class; case "artemisstreamingenabled": case "artemisStreamingEnabled": return boolean.class; case "asyncconsumer": @@ -414,6 +418,8 @@ public class JmsEndpointConfigurer extends PropertyConfigurerSupport implements case "allowSerializedHeaders": return target.getConfiguration().isAllowSerializedHeaders(); case "alwayscopymessage": case "alwaysCopyMessage": return target.getConfiguration().isAlwaysCopyMessage(); + case "artemisconsumerpriority": + case "artemisConsumerPriority": return target.getConfiguration().getArtemisConsumerPriority(); case "artemisstreamingenabled": case "artemisStreamingEnabled": return target.getConfiguration().isArtemisStreamingEnabled(); case "asyncconsumer": diff --git a/components/camel-jms/src/generated/java/org/apache/camel/component/jms/JmsEndpointUriFactory.java b/components/camel-jms/src/generated/java/org/apache/camel/component/jms/JmsEndpointUriFactory.java index 361f076..8f1de6c 100644 --- a/components/camel-jms/src/generated/java/org/apache/camel/component/jms/JmsEndpointUriFactory.java +++ b/components/camel-jms/src/generated/java/org/apache/camel/component/jms/JmsEndpointUriFactory.java @@ -20,69 +20,83 @@ public class JmsEndpointUriFactory extends org.apache.camel.support.component.En private static final Set<String> PROPERTY_NAMES; private static final Set<String> SECRET_PROPERTY_NAMES; static { - Set<String> props = new HashSet<>(96); + Set<String> props = new HashSet<>(97); props.add("includeSentJMSMessageID"); props.add("asyncConsumer"); props.add("mapJmsMessage"); + props.add("synchronous"); + props.add("eagerLoadingOfProperties"); + props.add("password"); + props.add("replyToMaxConcurrentConsumers"); + props.add("deliveryMode"); + props.add("transferException"); + props.add("asyncStartListener"); + props.add("eagerPoisonBody"); + props.add("artemisStreamingEnabled"); + props.add("maxConcurrentConsumers"); + props.add("taskExecutor"); + props.add("priority"); + props.add("acknowledgementModeName"); + props.add("exposeListenerSession"); + props.add("receiveTimeout"); + props.add("replyTo"); + props.add("replyToOverride"); + props.add("errorHandlerLoggingLevel"); + props.add("errorHandler"); + props.add("allowReplyManagerQuickStop"); + props.add("replyToOnTimeoutMaxConcurrentConsumers"); + props.add("messageConverter"); + props.add("maxMessagesPerTask"); + props.add("jmsKeyFormatStrategy"); + props.add("streamMessageTypeEnabled"); + props.add("headerFilterStrategy"); + props.add("destinationName"); + props.add("allowAdditionalHeaders"); + props.add("clientId"); + props.add("recoveryInterval"); + props.add("replyToCacheLevelName"); + props.add("messageIdEnabled"); + props.add("allowSerializedHeaders"); + props.add("preserveMessageQos"); + props.add("connectionFactory"); + props.add("testConnectionOnStartup"); + props.add("subscriptionName"); + props.add("useMessageIDAsCorrelationID"); + props.add("cacheLevelName"); + props.add("idleTaskExecutionLimit"); props.add("messageListenerContainerFactory"); props.add("requestTimeoutCheckerInterval"); - props.add("synchronous"); props.add("includeAllJMSXProperties"); props.add("cacheLevel"); props.add("errorHandlerLogStackTrace"); props.add("transactedInOut"); - props.add("eagerLoadingOfProperties"); props.add("timeToLive"); - props.add("password"); - props.add("replyToMaxConcurrentConsumers"); - props.add("deliveryMode"); - props.add("transferException"); props.add("exceptionListener"); props.add("destinationType"); - props.add("asyncStartListener"); props.add("waitForProvisionCorrelationToBeUpdatedThreadSleepingTime"); props.add("transactionManager"); - props.add("eagerPoisonBody"); props.add("alwaysCopyMessage"); + props.add("artemisConsumerPriority"); props.add("replyToConcurrentConsumers"); - props.add("artemisStreamingEnabled"); props.add("replyToDestinationSelectorName"); - props.add("maxConcurrentConsumers"); - props.add("taskExecutor"); props.add("disableTimeToLive"); props.add("deliveryPersistent"); - props.add("priority"); props.add("concurrentConsumers"); props.add("acceptMessagesWhileStopping"); props.add("consumerType"); - props.add("acknowledgementModeName"); props.add("lazyStartProducer"); - props.add("exposeListenerSession"); - props.add("receiveTimeout"); props.add("subscriptionDurable"); props.add("destinationResolver"); - props.add("replyTo"); - props.add("replyToOverride"); - props.add("errorHandlerLoggingLevel"); - props.add("errorHandler"); props.add("exceptionHandler"); - props.add("allowReplyManagerQuickStop"); props.add("idleConsumerLimit"); - props.add("replyToOnTimeoutMaxConcurrentConsumers"); props.add("explicitQosEnabled"); - props.add("messageConverter"); - props.add("maxMessagesPerTask"); props.add("transacted"); props.add("transactionName"); props.add("correlationProperty"); props.add("autoStartup"); props.add("messageTimestampEnabled"); - props.add("jmsKeyFormatStrategy"); - props.add("streamMessageTypeEnabled"); - props.add("headerFilterStrategy"); props.add("waitForProvisionCorrelationToBeUpdatedCounter"); props.add("lazyCreateTransactionManager"); - props.add("destinationName"); props.add("messageCreatedStrategy"); props.add("asyncStopListener"); props.add("transferExchange"); @@ -93,29 +107,16 @@ public class JmsEndpointUriFactory extends org.apache.camel.support.component.En props.add("deliveryDelay"); props.add("disableReplyTo"); props.add("formatDateHeadersToIso8601"); - props.add("allowAdditionalHeaders"); - props.add("clientId"); - props.add("recoveryInterval"); - props.add("replyToCacheLevelName"); - props.add("messageIdEnabled"); props.add("exchangePattern"); - props.add("allowSerializedHeaders"); props.add("pubSubNoLocal"); - props.add("preserveMessageQos"); props.add("forceSendOriginalMessage"); props.add("subscriptionShared"); props.add("replyToType"); - props.add("connectionFactory"); - props.add("testConnectionOnStartup"); - props.add("subscriptionName"); - props.add("useMessageIDAsCorrelationID"); props.add("transactionTimeout"); props.add("durableSubscriptionName"); props.add("replyToSameDestinationAllowed"); props.add("jmsMessageType"); props.add("defaultTaskExecutorType"); - props.add("cacheLevelName"); - props.add("idleTaskExecutionLimit"); props.add("username"); PROPERTY_NAMES = Collections.unmodifiableSet(props); Set<String> secretProps = new HashSet<>(2); diff --git a/components/camel-jms/src/generated/resources/org/apache/camel/component/jms/jms.json b/components/camel-jms/src/generated/resources/org/apache/camel/component/jms/jms.json index 3afaeff..6df0bf2 100644 --- a/components/camel-jms/src/generated/resources/org/apache/camel/component/jms/jms.json +++ b/components/camel-jms/src/generated/resources/org/apache/camel/component/jms/jms.json @@ -31,6 +31,7 @@ "replyTo": { "kind": "property", "displayName": "Reply To", "group": "common", "label": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.jms.JmsConfiguration", "configurationField": "configuration", "description": "Provides an explicit ReplyTo destination (overrides any incoming value of Message.getJMSReplyTo() in consumer)." }, "testConnectionOnStartup": { "kind": "property", "displayName": "Test Connection On Startup", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.jms.JmsConfiguration", "configurationField": "configuration", "description": "Specifies whether to test the connection on startup. This ensures that when Camel starts tha [...] "acknowledgementModeName": { "kind": "property", "displayName": "Acknowledgement Mode Name", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "enum": [ "SESSION_TRANSACTED", "CLIENT_ACKNOWLEDGE", "AUTO_ACKNOWLEDGE", "DUPS_OK_ACKNOWLEDGE" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "AUTO_ACKNOWLEDGE", "configurationClass": "org.apache.camel.component.jms.JmsConfiguration", "configurationFiel [...] + "artemisConsumerPriority": { "kind": "property", "displayName": "Artemis Consumer Priority", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.jms.JmsConfiguration", "configurationField": "configuration", "description": "Consumer priorities allow you to ensure that high priority consumers receive messages while they are active. N [...] "asyncConsumer": { "kind": "property", "displayName": "Async Consumer", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.jms.JmsConfiguration", "configurationField": "configuration", "description": "Whether the JmsConsumer processes the Exchange asynchronously. If enabled then the JmsConsumer may picku [...] "autoStartup": { "kind": "property", "displayName": "Auto Startup", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.jms.JmsConfiguration", "configurationField": "configuration", "description": "Specifies whether the consumer container should auto-startup." }, "cacheLevel": { "kind": "property", "displayName": "Cache Level", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.jms.JmsConfiguration", "configurationField": "configuration", "description": "Sets the cache level by ID for the underlying JMS resources. See cacheLevelName option for more details." }, @@ -132,6 +133,7 @@ "replyTo": { "kind": "parameter", "displayName": "Reply To", "group": "common", "label": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.jms.JmsConfiguration", "configurationField": "configuration", "description": "Provides an explicit ReplyTo destination (overrides any incoming value of Message.getJMSReplyTo() in consumer)." }, "testConnectionOnStartup": { "kind": "parameter", "displayName": "Test Connection On Startup", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.jms.JmsConfiguration", "configurationField": "configuration", "description": "Specifies whether to test the connection on startup. This ensures that when Camel starts th [...] "acknowledgementModeName": { "kind": "parameter", "displayName": "Acknowledgement Mode Name", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "enum": [ "SESSION_TRANSACTED", "CLIENT_ACKNOWLEDGE", "AUTO_ACKNOWLEDGE", "DUPS_OK_ACKNOWLEDGE" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "AUTO_ACKNOWLEDGE", "configurationClass": "org.apache.camel.component.jms.JmsConfiguration", "configurationFie [...] + "artemisConsumerPriority": { "kind": "parameter", "displayName": "Artemis Consumer Priority", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.jms.JmsConfiguration", "configurationField": "configuration", "description": "Consumer priorities allow you to ensure that high priority consumers receive messages while they are active. [...] "asyncConsumer": { "kind": "parameter", "displayName": "Async Consumer", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.jms.JmsConfiguration", "configurationField": "configuration", "description": "Whether the JmsConsumer processes the Exchange asynchronously. If enabled then the JmsConsumer may pick [...] "autoStartup": { "kind": "parameter", "displayName": "Auto Startup", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.jms.JmsConfiguration", "configurationField": "configuration", "description": "Specifies whether the consumer container should auto-startup." }, "cacheLevel": { "kind": "parameter", "displayName": "Cache Level", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.jms.JmsConfiguration", "configurationField": "configuration", "description": "Sets the cache level by ID for the underlying JMS resources. See cacheLevelName option for more details." }, diff --git a/components/camel-jms/src/main/docs/jms-component.adoc b/components/camel-jms/src/main/docs/jms-component.adoc index e119799..67a4063 100644 --- a/components/camel-jms/src/main/docs/jms-component.adoc +++ b/components/camel-jms/src/main/docs/jms-component.adoc @@ -187,7 +187,7 @@ about these properties by consulting the relevant Spring documentation. // component options: START -The JMS component supports 97 options, which are listed below. +The JMS component supports 98 options, which are listed below. @@ -202,6 +202,7 @@ The JMS component supports 97 options, which are listed below. | *replyTo* (common) | Provides an explicit ReplyTo destination (overrides any incoming value of Message.getJMSReplyTo() in consumer). | | String | *testConnectionOnStartup* (common) | Specifies whether to test the connection on startup. This ensures that when Camel starts that all the JMS consumers have a valid connection to the JMS broker. If a connection cannot be granted then Camel throws an exception on startup. This ensures that Camel is not started with failed connections. The JMS producers is tested as well. | false | boolean | *acknowledgementModeName* (consumer) | The JMS acknowledgement name, which is one of: SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE. There are 4 enums and the value can be one of: SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE | AUTO_ACKNOWLEDGE | String +| *artemisConsumerPriority* (consumer) | Consumer priorities allow you to ensure that high priority consumers receive messages while they are active. Normally, active consumers connected to a queue receive messages from it in a round-robin fashion. When consumer priorities are in use, messages are delivered round-robin if multiple active consumers exist with the same high priority. Messages will only going to lower priority consumers when the high priority consumers do not have credit av [...] | *asyncConsumer* (consumer) | Whether the JmsConsumer processes the Exchange asynchronously. If enabled then the JmsConsumer may pickup the next message from the JMS queue, while the previous message is being processed asynchronously (by the Asynchronous Routing Engine). This means that messages may be processed not 100% strictly in order. If disabled (as default) then the Exchange is fully processed before the JmsConsumer will pickup the next message from the JMS queue. Note if transac [...] | *autoStartup* (consumer) | Specifies whether the consumer container should auto-startup. | true | boolean | *cacheLevel* (consumer) | Sets the cache level by ID for the underlying JMS resources. See cacheLevelName option for more details. | | int @@ -345,12 +346,12 @@ with the following path and query parameters: | *replyTo* (common) | Provides an explicit ReplyTo destination (overrides any incoming value of Message.getJMSReplyTo() in consumer). | | String | *testConnectionOnStartup* (common) | Specifies whether to test the connection on startup. This ensures that when Camel starts that all the JMS consumers have a valid connection to the JMS broker. If a connection cannot be granted then Camel throws an exception on startup. This ensures that Camel is not started with failed connections. The JMS producers is tested as well. | false | boolean | *acknowledgementModeName* (consumer) | The JMS acknowledgement name, which is one of: SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE. There are 4 enums and the value can be one of: SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE | AUTO_ACKNOWLEDGE | String +| *artemisConsumerPriority* (consumer) | Consumer priorities allow you to ensure that high priority consumers receive messages while they are active. Normally, active consumers connected to a queue receive messages from it in a round-robin fashion. When consumer priorities are in use, messages are delivered round-robin if multiple active consumers exist with the same high priority. Messages will only going to lower priority consumers when the high priority consumers do not have credit av [...] | *asyncConsumer* (consumer) | Whether the JmsConsumer processes the Exchange asynchronously. If enabled then the JmsConsumer may pickup the next message from the JMS queue, while the previous message is being processed asynchronously (by the Asynchronous Routing Engine). This means that messages may be processed not 100% strictly in order. If disabled (as default) then the Exchange is fully processed before the JmsConsumer will pickup the next message from the JMS queue. Note if transac [...] | *autoStartup* (consumer) | Specifies whether the consumer container should auto-startup. | true | boolean | *cacheLevel* (consumer) | Sets the cache level by ID for the underlying JMS resources. See cacheLevelName option for more details. | | int | *cacheLevelName* (consumer) | Sets the cache level by name for the underlying JMS resources. Possible values are: CACHE_AUTO, CACHE_CONNECTION, CACHE_CONSUMER, CACHE_NONE, and CACHE_SESSION. The default setting is CACHE_AUTO. See the Spring documentation and Transactions Cache Levels for more information. There are 5 enums and the value can be one of: CACHE_AUTO, CACHE_CONNECTION, CACHE_CONSUMER, CACHE_NONE, CACHE_SESSION | CACHE_AUTO | String | *concurrentConsumers* (consumer) | Specifies the default number of concurrent consumers when consuming from JMS (not for request/reply over JMS). See also the maxMessagesPerTask option to control dynamic scaling up/down of threads. When doing request/reply over JMS then the option replyToConcurrentConsumers is used to control number of concurrent consumers on the reply message listener. | 1 | int -| *consumerPriority* (consumer) | Consumer priorities allow you to ensure that high priority consumers receive messages while they are active. Normally, active consumers connected to a queue receive messages from it in a round-robin fashion. When consumer priorities are in use, messages are delivered round-robin if multiple active consumers exist with the same high priority. Messages will only going to lower priority consumers when the high priority consumers do not have credit available [...] | *maxConcurrentConsumers* (consumer) | Specifies the maximum number of concurrent consumers when consuming from JMS (not for request/reply over JMS). See also the maxMessagesPerTask option to control dynamic scaling up/down of threads. When doing request/reply over JMS then the option replyToMaxConcurrentConsumers is used to control number of concurrent consumers on the reply message listener. | | int | *replyToDeliveryPersistent* (consumer) | Specifies whether to use persistent delivery by default for replies. | true | boolean | *selector* (consumer) | Sets the JMS selector to use | | String diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java index 883518b..8795807 100644 --- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java +++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java @@ -1021,6 +1021,14 @@ public class JmsComponent extends HeaderFilterStrategyComponent { configuration.setArtemisStreamingEnabled(artemisStreamingEnabled); } + public void setArtemisConsumerPriority(int priority) { + configuration.setArtemisConsumerPriority(priority); + } + + public int getArtemisConsumerPriority() { + return configuration.getArtemisConsumerPriority(); + } + // Implementation methods // ------------------------------------------------------------------------- diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java index 9efcdac..939a70a 100644 --- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java +++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java @@ -478,8 +478,16 @@ public class JmsConfiguration implements Cloneable { @UriParam(label = "producer", description = "Sets whether JMS date properties should be formatted according to the ISO 8601 standard.") private boolean formatDateHeadersToIso8601; - @UriParam(defaultValue = "true", label = "advanced", description = "Whether optimizing for Apache Artemis streaming mode.") + @UriParam(label = "advanced", defaultValue = "true", description = "Whether optimizing for Apache Artemis streaming mode.") private boolean artemisStreamingEnabled = true; + @UriParam(label = "consumer", description = "Consumer priorities allow you to ensure that high priority consumers" + + " receive messages while they are active. Normally, active consumers connected to a queue receive messages" + + " from it in a round-robin fashion. When consumer priorities are in use, messages are delivered round-robin" + + " if multiple active consumers exist with the same high priority. Messages will only going to lower priority" + + " consumers when the high priority consumers do not have credit available to consume the message, or those" + + " high priority consumers have declined to accept the message (for instance because it does not meet the" + + " criteria of any selectors associated with the consumer).") + private int artemisConsumerPriority; // JMS 2.0 API @UriParam(label = "consumer", description = "Set the name of a subscription to create. To be applied in case" @@ -521,15 +529,6 @@ public class JmsConfiguration implements Cloneable { description = "Sets whether synchronous processing should be strictly used") private boolean synchronous; - @UriParam(label = "consumer", description = "Consumer priorities allow you to ensure that high priority consumers" - + " receive messages while they are active. Normally, active consumers connected to a queue receive messages" - + " from it in a round-robin fashion. When consumer priorities are in use, messages are delivered round-robin" - + " if multiple active consumers exist with the same high priority. Messages will only going to lower priority" - + " consumers when the high priority consumers do not have credit available to consume the message, or those" - + " high priority consumers have declined to accept the message (for instance because it does not meet the" - + " criteria of any selectors associated with the consumer).") - private int consumerPriority; - public JmsConfiguration() { } @@ -2293,20 +2292,20 @@ public class JmsConfiguration implements Cloneable { this.artemisStreamingEnabled = artemisStreamingEnabled; } - public boolean isSynchronous() { - return synchronous; + public void setArtemisConsumerPriority(int priority) { + this.artemisConsumerPriority = priority; } - public void setSynchronous(boolean synchronous) { - this.synchronous = synchronous; + public int getArtemisConsumerPriority() { + return artemisConsumerPriority; } - public void setConsumerPriority(int priority) { - this.consumerPriority = priority; + public boolean isSynchronous() { + return synchronous; } - public int getConsumerPriority() { - return consumerPriority; + public void setSynchronous(boolean synchronous) { + this.synchronous = synchronous; } } diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java index 8388e65..c21b05c 100644 --- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java +++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java @@ -21,14 +21,10 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.atomic.AtomicInteger; import javax.jms.ConnectionFactory; -import javax.jms.Destination; import javax.jms.ExceptionListener; -import javax.jms.JMSException; import javax.jms.Message; import javax.jms.Queue; import javax.jms.Session; -import javax.jms.TemporaryQueue; -import javax.jms.TemporaryTopic; import javax.jms.Topic; import org.apache.camel.AsyncEndpoint; @@ -88,23 +84,12 @@ public class JmsEndpoint extends DefaultEndpoint @UriPath(description = "Name of the queue or topic to use as destination") @Metadata(required = true) private String destinationName; - private Destination destination; @UriParam(label = "advanced", description = "To use a custom HeaderFilterStrategy to filter header to and from Camel message.") private HeaderFilterStrategy headerFilterStrategy; @UriParam private JmsConfiguration configuration; - public JmsEndpoint() { - this(null, null); - } - - public JmsEndpoint(Topic destination) throws JMSException { - this("jms:topic:" + destination.getTopicName(), null); - this.destination = destination; - this.destinationType = "topic"; - } - public JmsEndpoint(String uri, JmsComponent component, String destinationName, boolean pubSubDomain, JmsConfiguration configuration) { super(UnsafeUriCharactersEncoder.encode(uri), component); @@ -149,32 +134,6 @@ public class JmsEndpoint extends DefaultEndpoint this(UnsafeUriCharactersEncoder.encode(endpointUri), destinationName, true); } - /** - * Returns a new JMS endpoint for the given JMS destination using the configuration from the given JMS component - */ - public static JmsEndpoint newInstance(Destination destination, JmsComponent component) throws JMSException { - JmsEndpoint answer = newInstance(destination); - JmsConfiguration newConfiguration = component.getConfiguration().copy(); - answer.setConfiguration(newConfiguration); - answer.setCamelContext(component.getCamelContext()); - return answer; - } - - /** - * Returns a new JMS endpoint for the given JMS destination - */ - public static JmsEndpoint newInstance(Destination destination) throws JMSException { - if (destination instanceof TemporaryQueue) { - return new JmsTemporaryQueueEndpoint((TemporaryQueue) destination); - } else if (destination instanceof TemporaryTopic) { - return new JmsTemporaryTopicEndpoint((TemporaryTopic) destination); - } else if (destination instanceof Queue) { - return new JmsQueueEndpoint((Queue) destination); - } else { - return new JmsEndpoint((Topic) destination); - } - } - @Override public Producer createProducer() throws Exception { Producer answer = new JmsProducer(this); @@ -197,14 +156,12 @@ public class JmsEndpoint extends DefaultEndpoint public void configureListenerContainer(AbstractMessageListenerContainer listenerContainer, JmsConsumer consumer) { if (destinationName != null) { - if (getConfiguration().getConsumerPriority() != 0) { - destinationName += "?consumer-priority=" + getConfiguration().getConsumerPriority(); + String target = destinationName; + if (getConfiguration().getArtemisConsumerPriority() != 0) { + target += "?consumer-priority=" + getConfiguration().getArtemisConsumerPriority(); } - listenerContainer.setDestinationName(destinationName); + listenerContainer.setDestinationName(target); LOG.debug("Using destinationName: {} on listenerContainer: {}", destinationName, listenerContainer); - } else if (destination != null) { - listenerContainer.setDestination(destination); - LOG.debug("Using destination: {} on listenerContainer: {}", destinationName, listenerContainer); } else { DestinationResolver resolver = getDestinationResolver(); if (resolver != null) { @@ -432,17 +389,6 @@ public class JmsEndpoint extends DefaultEndpoint this.destinationName = destinationName; } - public Destination getDestination() { - return destination; - } - - /** - * Allows a specific JMS Destination object to be used as the destination - */ - public void setDestination(Destination destination) { - this.destination = destination; - } - public JmsConfiguration getConfiguration() { return configuration; } @@ -1328,9 +1274,7 @@ public class JmsEndpoint extends DefaultEndpoint @Override protected String createEndpointUri() { String scheme = "jms"; - if (destination != null) { - return scheme + ":" + destination; - } else if (destinationName != null) { + if (destinationName != null) { return scheme + ":" + destinationName; } DestinationResolver resolver = getDestinationResolver(); diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsProducer.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsProducer.java index 99acbc3..9719155 100644 --- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsProducer.java +++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsProducer.java @@ -179,9 +179,6 @@ public class JmsProducer extends DefaultAsyncProducer { Destination destination = in.getHeader(JmsConstants.JMS_DESTINATION, Destination.class); // remove the header so it wont be propagated in.removeHeader(JmsConstants.JMS_DESTINATION); - if (destination == null) { - destination = endpoint.getDestination(); - } if (destination != null) { // prefer to use destination over destination name destinationName = null; @@ -314,9 +311,6 @@ public class JmsProducer extends DefaultAsyncProducer { // remove the header so it wont be propagated in.removeHeader(JmsConstants.JMS_DESTINATION); } - if (destination == null) { - destination = endpoint.getDestination(); - } if (destination != null) { // prefer to use destination over destination name destinationName = null; diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsQueueEndpoint.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsQueueEndpoint.java index be375f4..bb1f4d7 100644 --- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsQueueEndpoint.java +++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsQueueEndpoint.java @@ -19,7 +19,6 @@ package org.apache.camel.component.jms; import java.util.Collections; import java.util.List; -import javax.jms.JMSException; import javax.jms.Queue; import org.apache.camel.Exchange; @@ -36,12 +35,6 @@ public class JmsQueueEndpoint extends JmsEndpoint implements BrowsableEndpoint { private int maximumBrowseSize = -1; private final QueueBrowseStrategy queueBrowseStrategy; - public JmsQueueEndpoint(Queue destination) throws JMSException { - this("jms:queue:" + destination.getQueueName(), null); - setDestinationType("queue"); - setDestination(destination); - } - public JmsQueueEndpoint(String uri, JmsComponent component, String destination, JmsConfiguration configuration) { this(uri, component, destination, configuration, null); diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsTemporaryQueueEndpoint.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsTemporaryQueueEndpoint.java index d7ea610..9f4c503 100644 --- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsTemporaryQueueEndpoint.java +++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsTemporaryQueueEndpoint.java @@ -45,13 +45,6 @@ public class JmsTemporaryQueueEndpoint extends JmsQueueEndpoint implements Desti setDestinationType("temp-queue"); } - public JmsTemporaryQueueEndpoint(TemporaryQueue jmsDestination) throws JMSException { - super("jms:temp-queue:" + jmsDestination.getQueueName(), null); - setDestinationType("temp-queue"); - this.jmsDestination = jmsDestination; - setDestination(jmsDestination); - } - /** * This endpoint is a singleton so that the temporary destination instances are shared across all producers and * consumers of the same endpoint URI diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsTemporaryTopicEndpoint.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsTemporaryTopicEndpoint.java index 7989b89..d9074ec 100644 --- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsTemporaryTopicEndpoint.java +++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsTemporaryTopicEndpoint.java @@ -38,13 +38,6 @@ public class JmsTemporaryTopicEndpoint extends JmsEndpoint implements Destinatio setDestinationType("temp-topic"); } - public JmsTemporaryTopicEndpoint(TemporaryTopic jmsDestination) throws JMSException { - super("jms:temp-topic:" + jmsDestination.getTopicName(), null); - this.jmsDestination = jmsDestination; - setDestinationType("temp-topic"); - setDestination(jmsDestination); - } - /** * This endpoint is a singleton so that the temporary destination instances are shared across all producers and * consumers of the same endpoint URI diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsEndpointConfigurationTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsEndpointConfigurationTest.java index 6e324f6..64b3129 100644 --- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsEndpointConfigurationTest.java +++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsEndpointConfigurationTest.java @@ -319,7 +319,6 @@ public class JmsEndpointConfigurationTest extends CamelTestSupport { assertNotNull(endpoint.getConnectionFactory()); assertEquals(1, endpoint.getConcurrentConsumers()); assertNull(endpoint.getDeliveryMode()); - assertNull(endpoint.getDestination()); assertEquals("Foo", endpoint.getDestinationName()); assertNull(endpoint.getDestinationResolver()); assertNull(endpoint.getDurableSubscriptionName()); diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/JmsComponentBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/JmsComponentBuilderFactory.java index 9481450..fc53aa5 100644 --- a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/JmsComponentBuilderFactory.java +++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/JmsComponentBuilderFactory.java @@ -194,6 +194,30 @@ public interface JmsComponentBuilderFactory { return this; } /** + * Consumer priorities allow you to ensure that high priority consumers + * receive messages while they are active. Normally, active consumers + * connected to a queue receive messages from it in a round-robin + * fashion. When consumer priorities are in use, messages are delivered + * round-robin if multiple active consumers exist with the same high + * priority. Messages will only going to lower priority consumers when + * the high priority consumers do not have credit available to consume + * the message, or those high priority consumers have declined to accept + * the message (for instance because it does not meet the criteria of + * any selectors associated with the consumer). + * + * The option is a: <code>int</code> type. + * + * Group: consumer + * + * @param artemisConsumerPriority the value to set + * @return the dsl builder + */ + default JmsComponentBuilder artemisConsumerPriority( + int artemisConsumerPriority) { + doSetProperty("artemisConsumerPriority", artemisConsumerPriority); + return this; + } + /** * Whether the JmsConsumer processes the Exchange asynchronously. If * enabled then the JmsConsumer may pickup the next message from the JMS * queue, while the previous message is being processed asynchronously @@ -1923,6 +1947,7 @@ public interface JmsComponentBuilderFactory { case "replyTo": getOrCreateConfiguration((JmsComponent) component).setReplyTo((java.lang.String) value); return true; case "testConnectionOnStartup": getOrCreateConfiguration((JmsComponent) component).setTestConnectionOnStartup((boolean) value); return true; case "acknowledgementModeName": getOrCreateConfiguration((JmsComponent) component).setAcknowledgementModeName((java.lang.String) value); return true; + case "artemisConsumerPriority": getOrCreateConfiguration((JmsComponent) component).setArtemisConsumerPriority((int) value); return true; case "asyncConsumer": getOrCreateConfiguration((JmsComponent) component).setAsyncConsumer((boolean) value); return true; case "autoStartup": getOrCreateConfiguration((JmsComponent) component).setAutoStartup((boolean) value); return true; case "cacheLevel": getOrCreateConfiguration((JmsComponent) component).setCacheLevel((int) value); return true; diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/JmsEndpointBuilderFactory.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/JmsEndpointBuilderFactory.java index 71ba787..6a032b8 100644 --- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/JmsEndpointBuilderFactory.java +++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/JmsEndpointBuilderFactory.java @@ -269,6 +269,54 @@ public interface JmsEndpointBuilderFactory { return this; } /** + * Consumer priorities allow you to ensure that high priority consumers + * receive messages while they are active. Normally, active consumers + * connected to a queue receive messages from it in a round-robin + * fashion. When consumer priorities are in use, messages are delivered + * round-robin if multiple active consumers exist with the same high + * priority. Messages will only going to lower priority consumers when + * the high priority consumers do not have credit available to consume + * the message, or those high priority consumers have declined to accept + * the message (for instance because it does not meet the criteria of + * any selectors associated with the consumer). + * + * The option is a: <code>int</code> type. + * + * Group: consumer + * + * @param artemisConsumerPriority the value to set + * @return the dsl builder + */ + default JmsEndpointConsumerBuilder artemisConsumerPriority( + int artemisConsumerPriority) { + doSetProperty("artemisConsumerPriority", artemisConsumerPriority); + return this; + } + /** + * Consumer priorities allow you to ensure that high priority consumers + * receive messages while they are active. Normally, active consumers + * connected to a queue receive messages from it in a round-robin + * fashion. When consumer priorities are in use, messages are delivered + * round-robin if multiple active consumers exist with the same high + * priority. Messages will only going to lower priority consumers when + * the high priority consumers do not have credit available to consume + * the message, or those high priority consumers have declined to accept + * the message (for instance because it does not meet the criteria of + * any selectors associated with the consumer). + * + * The option will be converted to a <code>int</code> type. + * + * Group: consumer + * + * @param artemisConsumerPriority the value to set + * @return the dsl builder + */ + default JmsEndpointConsumerBuilder artemisConsumerPriority( + String artemisConsumerPriority) { + doSetProperty("artemisConsumerPriority", artemisConsumerPriority); + return this; + } + /** * Whether the JmsConsumer processes the Exchange asynchronously. If * enabled then the JmsConsumer may pickup the next message from the JMS * queue, while the previous message is being processed asynchronously diff --git a/docs/components/modules/ROOT/pages/jms-component.adoc b/docs/components/modules/ROOT/pages/jms-component.adoc index df2b332..27c0ae3 100644 --- a/docs/components/modules/ROOT/pages/jms-component.adoc +++ b/docs/components/modules/ROOT/pages/jms-component.adoc @@ -189,7 +189,7 @@ about these properties by consulting the relevant Spring documentation. // component options: START -The JMS component supports 97 options, which are listed below. +The JMS component supports 98 options, which are listed below. @@ -204,6 +204,7 @@ The JMS component supports 97 options, which are listed below. | *replyTo* (common) | Provides an explicit ReplyTo destination (overrides any incoming value of Message.getJMSReplyTo() in consumer). | | String | *testConnectionOnStartup* (common) | Specifies whether to test the connection on startup. This ensures that when Camel starts that all the JMS consumers have a valid connection to the JMS broker. If a connection cannot be granted then Camel throws an exception on startup. This ensures that Camel is not started with failed connections. The JMS producers is tested as well. | false | boolean | *acknowledgementModeName* (consumer) | The JMS acknowledgement name, which is one of: SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE. There are 4 enums and the value can be one of: SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE | AUTO_ACKNOWLEDGE | String +| *artemisConsumerPriority* (consumer) | Consumer priorities allow you to ensure that high priority consumers receive messages while they are active. Normally, active consumers connected to a queue receive messages from it in a round-robin fashion. When consumer priorities are in use, messages are delivered round-robin if multiple active consumers exist with the same high priority. Messages will only going to lower priority consumers when the high priority consumers do not have credit av [...] | *asyncConsumer* (consumer) | Whether the JmsConsumer processes the Exchange asynchronously. If enabled then the JmsConsumer may pickup the next message from the JMS queue, while the previous message is being processed asynchronously (by the Asynchronous Routing Engine). This means that messages may be processed not 100% strictly in order. If disabled (as default) then the Exchange is fully processed before the JmsConsumer will pickup the next message from the JMS queue. Note if transac [...] | *autoStartup* (consumer) | Specifies whether the consumer container should auto-startup. | true | boolean | *cacheLevel* (consumer) | Sets the cache level by ID for the underlying JMS resources. See cacheLevelName option for more details. | | int @@ -333,7 +334,7 @@ with the following path and query parameters: |=== -=== Query Parameters (94 parameters): +=== Query Parameters (95 parameters): [width="100%",cols="2,5,^1,2",options="header"] @@ -347,6 +348,7 @@ with the following path and query parameters: | *replyTo* (common) | Provides an explicit ReplyTo destination (overrides any incoming value of Message.getJMSReplyTo() in consumer). | | String | *testConnectionOnStartup* (common) | Specifies whether to test the connection on startup. This ensures that when Camel starts that all the JMS consumers have a valid connection to the JMS broker. If a connection cannot be granted then Camel throws an exception on startup. This ensures that Camel is not started with failed connections. The JMS producers is tested as well. | false | boolean | *acknowledgementModeName* (consumer) | The JMS acknowledgement name, which is one of: SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE. There are 4 enums and the value can be one of: SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE | AUTO_ACKNOWLEDGE | String +| *artemisConsumerPriority* (consumer) | Consumer priorities allow you to ensure that high priority consumers receive messages while they are active. Normally, active consumers connected to a queue receive messages from it in a round-robin fashion. When consumer priorities are in use, messages are delivered round-robin if multiple active consumers exist with the same high priority. Messages will only going to lower priority consumers when the high priority consumers do not have credit av [...] | *asyncConsumer* (consumer) | Whether the JmsConsumer processes the Exchange asynchronously. If enabled then the JmsConsumer may pickup the next message from the JMS queue, while the previous message is being processed asynchronously (by the Asynchronous Routing Engine). This means that messages may be processed not 100% strictly in order. If disabled (as default) then the Exchange is fully processed before the JmsConsumer will pickup the next message from the JMS queue. Note if transac [...] | *autoStartup* (consumer) | Specifies whether the consumer container should auto-startup. | true | boolean | *cacheLevel* (consumer) | Sets the cache level by ID for the underlying JMS resources. See cacheLevelName option for more details. | | int