[create-pull-request] automated change
diff --git a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/pulsar.json b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/pulsar.json
index d97c896..56e794e 100644
--- a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/pulsar.json
+++ b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/pulsar.json
@@ -32,8 +32,10 @@
     "consumerQueueSize": { "kind": "property", "displayName": "Consumer Queue Size", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 10, "configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": "configuration", "description": "Size of the consumer queue - defaults to 10" },
     "deadLetterTopic": { "kind": "property", "displayName": "Dead Letter Topic", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": "configuration", "description": "Name of the topic where the messages which fail maxRedeliverCount times will be sent. Note: if not set, default topic name will be topicName-subscriptionName-DLQ" },
     "maxRedeliverCount": { "kind": "property", "displayName": "Max Redeliver Count", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": "configuration", "description": "Maximum number of times that a message will be redelivered before being sent to the dead letter queue. If this value is not set, no Dead Letter Policy will be created" },
+    "messageListener": { "kind": "property", "displayName": "Message Listener", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": "configuration", "description": "Whether to use the messageListener interface, or to receive messages using a separate thread pool" },
     "negativeAckRedeliveryDelayMicros": { "kind": "property", "displayName": "Negative Ack Redelivery Delay Micros", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 60000000, "configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": "configuration", "description": "Set the negative acknowledgement delay" },
     "numberOfConsumers": { "kind": "property", "displayName": "Number Of Consumers", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1, "configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": "configuration", "description": "Number of consumers - defaults to 1" },
+    "numberOfConsumerThreads": { "kind": "property", "displayName": "Number Of Consumer Threads", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1, "configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": "configuration", "description": "Number of threads to receive and handle messages when using a separate thread pool" },
     "readCompacted": { "kind": "property", "displayName": "Read Compacted", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": "configuration", "description": "Enable compacted topic reading." },
     "subscriptionInitialPosition": { "kind": "property", "displayName": "Subscription Initial Position", "group": "consumer", "label": "consumer", "required": false, "type": "object", "javaType": "org.apache.camel.component.pulsar.utils.consumers.SubscriptionInitialPosition", "enum": [ "EARLIEST", "LATEST" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "LATEST", "configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": "configuration", "description": "Control the initial position in the topic of a newly created subscription. Default is latest message." },
     "subscriptionName": { "kind": "property", "displayName": "Subscription Name", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "subs", "configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": "configuration", "description": "Name of the subscription to use" },
@@ -73,8 +75,10 @@
     "consumerQueueSize": { "kind": "parameter", "displayName": "Consumer Queue Size", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 10, "configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": "pulsarConfiguration", "description": "Size of the consumer queue - defaults to 10" },
     "deadLetterTopic": { "kind": "parameter", "displayName": "Dead Letter Topic", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": "pulsarConfiguration", "description": "Name of the topic where the messages which fail maxRedeliverCount times will be sent. Note: if not set, default topic name will be topicName-subscriptionName-DLQ" },
     "maxRedeliverCount": { "kind": "parameter", "displayName": "Max Redeliver Count", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": "pulsarConfiguration", "description": "Maximum number of times that a message will be redelivered before being sent to the dead letter queue. If this value is not set, no Dead Letter Policy will be created" },
+    "messageListener": { "kind": "parameter", "displayName": "Message Listener", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": "pulsarConfiguration", "description": "Whether to use the messageListener interface, or to receive messages using a separate thread pool" },
     "negativeAckRedeliveryDelayMicros": { "kind": "parameter", "displayName": "Negative Ack Redelivery Delay Micros", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 60000000, "configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": "pulsarConfiguration", "description": "Set the negative acknowledgement delay" },
     "numberOfConsumers": { "kind": "parameter", "displayName": "Number Of Consumers", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1, "configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": "pulsarConfiguration", "description": "Number of consumers - defaults to 1" },
+    "numberOfConsumerThreads": { "kind": "parameter", "displayName": "Number Of Consumer Threads", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1, "configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": "pulsarConfiguration", "description": "Number of threads to receive and handle messages when using a separate thread pool" },
     "readCompacted": { "kind": "parameter", "displayName": "Read Compacted", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": "pulsarConfiguration", "description": "Enable compacted topic reading." },
     "subscriptionInitialPosition": { "kind": "parameter", "displayName": "Subscription Initial Position", "group": "consumer", "label": "consumer", "required": false, "type": "object", "javaType": "org.apache.camel.component.pulsar.utils.consumers.SubscriptionInitialPosition", "enum": [ "EARLIEST", "LATEST" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "LATEST", "configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": "pulsarConfiguration", "description": "Control the initial position in the topic of a newly created subscription. Default is latest message." },
     "subscriptionName": { "kind": "parameter", "displayName": "Subscription Name", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "subs", "configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": "pulsarConfiguration", "description": "Name of the subscription to use" },
diff --git a/components-starter/camel-pulsar-starter/src/main/docs/pulsar-starter.adoc b/components-starter/camel-pulsar-starter/src/main/docs/pulsar-starter.adoc
index 37864c8..5b62e4f 100644
--- a/components-starter/camel-pulsar-starter/src/main/docs/pulsar-starter.adoc
+++ b/components-starter/camel-pulsar-starter/src/main/docs/pulsar-starter.adoc
@@ -17,7 +17,7 @@
 ----
 
 
-The component supports 37 options, which are listed below.
+The component supports 39 options, which are listed below.
 
 
 
@@ -47,9 +47,11 @@
 | *camel.component.pulsar.max-pending-messages* | Size of the pending massages queue. When the queue is full, by default, any further sends will fail unless blockIfQueueFull=true | 1000 | Integer
 | *camel.component.pulsar.max-pending-messages-across-partitions* | The maximum number of pending messages for partitioned topics. The maxPendingMessages value will be reduced if (number of partitions maxPendingMessages) exceeds this value. Partitioned topics have a pending message queue for each partition. | 50000 | Integer
 | *camel.component.pulsar.max-redeliver-count* | Maximum number of times that a message will be redelivered before being sent to the dead letter queue. If this value is not set, no Dead Letter Policy will be created |  | Integer
+| *camel.component.pulsar.message-listener* | Whether to use the messageListener interface, or to receive messages using a separate thread pool | true | Boolean
 | *camel.component.pulsar.message-router* | Custom Message Router to use. The option is a org.apache.pulsar.client.api.MessageRouter type. |  | MessageRouter
 | *camel.component.pulsar.message-routing-mode* | Message Routing Mode to use |  | MessageRoutingMode
 | *camel.component.pulsar.negative-ack-redelivery-delay-micros* | Set the negative acknowledgement delay | 60000000 | Long
+| *camel.component.pulsar.number-of-consumer-threads* | Number of threads to receive and handle messages when using a separate thread pool | 1 | Integer
 | *camel.component.pulsar.number-of-consumers* | Number of consumers - defaults to 1 | 1 | Integer
 | *camel.component.pulsar.producer-name* | Name of the producer. If unset, lets Pulsar select a unique identifier. |  | String
 | *camel.component.pulsar.pulsar-client* | The pulsar client. The option is a org.apache.pulsar.client.api.PulsarClient type. |  | PulsarClient
diff --git a/components-starter/camel-pulsar-starter/src/main/java/org/apache/camel/component/pulsar/springboot/PulsarComponentConfiguration.java b/components-starter/camel-pulsar-starter/src/main/java/org/apache/camel/component/pulsar/springboot/PulsarComponentConfiguration.java
index aeebe38..a6c2d4d 100644
--- a/components-starter/camel-pulsar-starter/src/main/java/org/apache/camel/component/pulsar/springboot/PulsarComponentConfiguration.java
+++ b/components-starter/camel-pulsar-starter/src/main/java/org/apache/camel/component/pulsar/springboot/PulsarComponentConfiguration.java
@@ -107,6 +107,11 @@
      */
     private Integer maxRedeliverCount;
     /**
+     * Whether to use the messageListener interface, or to receive messages
+     * using a separate thread pool
+     */
+    private Boolean messageListener = true;
+    /**
      * Set the negative acknowledgement delay
      */
     private Long negativeAckRedeliveryDelayMicros = 60000000L;
@@ -115,6 +120,11 @@
      */
     private Integer numberOfConsumers = 1;
     /**
+     * Number of threads to receive and handle messages when using a separate
+     * thread pool
+     */
+    private Integer numberOfConsumerThreads = 1;
+    /**
      * Enable compacted topic reading.
      */
     private Boolean readCompacted = false;
@@ -322,6 +332,14 @@
         this.maxRedeliverCount = maxRedeliverCount;
     }
 
+    public Boolean getMessageListener() {
+        return messageListener;
+    }
+
+    public void setMessageListener(Boolean messageListener) {
+        this.messageListener = messageListener;
+    }
+
     public Long getNegativeAckRedeliveryDelayMicros() {
         return negativeAckRedeliveryDelayMicros;
     }
@@ -339,6 +357,14 @@
         this.numberOfConsumers = numberOfConsumers;
     }
 
+    public Integer getNumberOfConsumerThreads() {
+        return numberOfConsumerThreads;
+    }
+
+    public void setNumberOfConsumerThreads(Integer numberOfConsumerThreads) {
+        this.numberOfConsumerThreads = numberOfConsumerThreads;
+    }
+
     public Boolean getReadCompacted() {
         return readCompacted;
     }
diff --git a/docs/modules/ROOT/pages/pulsar-starter.adoc b/docs/modules/ROOT/pages/pulsar-starter.adoc
index 37864c8..5b62e4f 100644
--- a/docs/modules/ROOT/pages/pulsar-starter.adoc
+++ b/docs/modules/ROOT/pages/pulsar-starter.adoc
@@ -17,7 +17,7 @@
 ----
 
 
-The component supports 37 options, which are listed below.
+The component supports 39 options, which are listed below.
 
 
 
@@ -47,9 +47,11 @@
 | *camel.component.pulsar.max-pending-messages* | Size of the pending massages queue. When the queue is full, by default, any further sends will fail unless blockIfQueueFull=true | 1000 | Integer
 | *camel.component.pulsar.max-pending-messages-across-partitions* | The maximum number of pending messages for partitioned topics. The maxPendingMessages value will be reduced if (number of partitions maxPendingMessages) exceeds this value. Partitioned topics have a pending message queue for each partition. | 50000 | Integer
 | *camel.component.pulsar.max-redeliver-count* | Maximum number of times that a message will be redelivered before being sent to the dead letter queue. If this value is not set, no Dead Letter Policy will be created |  | Integer
+| *camel.component.pulsar.message-listener* | Whether to use the messageListener interface, or to receive messages using a separate thread pool | true | Boolean
 | *camel.component.pulsar.message-router* | Custom Message Router to use. The option is a org.apache.pulsar.client.api.MessageRouter type. |  | MessageRouter
 | *camel.component.pulsar.message-routing-mode* | Message Routing Mode to use |  | MessageRoutingMode
 | *camel.component.pulsar.negative-ack-redelivery-delay-micros* | Set the negative acknowledgement delay | 60000000 | Long
+| *camel.component.pulsar.number-of-consumer-threads* | Number of threads to receive and handle messages when using a separate thread pool | 1 | Integer
 | *camel.component.pulsar.number-of-consumers* | Number of consumers - defaults to 1 | 1 | Integer
 | *camel.component.pulsar.producer-name* | Name of the producer. If unset, lets Pulsar select a unique identifier. |  | String
 | *camel.component.pulsar.pulsar-client* | The pulsar client. The option is a org.apache.pulsar.client.api.PulsarClient type. |  | PulsarClient
diff --git a/tooling/camel-spring-boot-dependencies/pom.xml b/tooling/camel-spring-boot-dependencies/pom.xml
index 20eb1db..6e53d59 100644
--- a/tooling/camel-spring-boot-dependencies/pom.xml
+++ b/tooling/camel-spring-boot-dependencies/pom.xml
@@ -4741,177 +4741,177 @@
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-benchmark</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-benchmark</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
         <classifier>javadoc</classifier>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-core</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-core</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
         <classifier>javadoc</classifier>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-distribution</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
         <type>zip</type>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-docs</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
         <type>zip</type>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-examples</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-persistence-common</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-persistence-common</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
         <classifier>javadoc</classifier>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-persistence-jackson</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-persistence-jackson</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
         <classifier>javadoc</classifier>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-persistence-jaxb</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-persistence-jaxb</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
         <classifier>javadoc</classifier>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-persistence-jpa</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-persistence-jpa</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
         <classifier>javadoc</classifier>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-persistence-jsonb</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-persistence-jsonb</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
         <classifier>javadoc</classifier>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-persistence-xstream</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-persistence-xstream</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
         <classifier>javadoc</classifier>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-quarkus</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-quarkus-benchmark</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-quarkus-benchmark-deployment</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-quarkus-deployment</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-quarkus-jackson</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-quarkus-jackson-deployment</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-quarkus-jackson-integration-test</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-quarkus-jsonb</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-quarkus-jsonb-deployment</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-quarkus-jsonb-integration-test</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-spring-boot-autoconfigure</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-spring-boot-starter</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-test</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
       </dependency>
       <dependency>
         <groupId>org.optaplanner</groupId>
         <artifactId>optaplanner-test</artifactId>
-        <version>8.8.0.Final</version>
+        <version>8.9.0.Final</version>
         <classifier>javadoc</classifier>
       </dependency>
       <dependency>