This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new a25f70df9e6 CAMEL-19866 - Camel-Pulsar: Support HashingScheme as uri 
parameter for producers (#11385)
a25f70df9e6 is described below

commit a25f70df9e6e7638e551c1b97caf8daf825728ed
Author: Andrea Cosentino <anco...@gmail.com>
AuthorDate: Thu Sep 14 08:42:14 2023 +0200

    CAMEL-19866 - Camel-Pulsar: Support HashingScheme as uri parameter for 
producers (#11385)
    
    Signed-off-by: Andrea Cosentino <anco...@gmail.com>
---
 .../apache/camel/catalog/components/pulsar.json    | 40 ++++++++++++----------
 .../pulsar/PulsarComponentConfigurer.java          |  6 ++++
 .../component/pulsar/PulsarEndpointConfigurer.java |  6 ++++
 .../component/pulsar/PulsarEndpointUriFactory.java |  3 +-
 .../org/apache/camel/component/pulsar/pulsar.json  | 40 ++++++++++++----------
 .../component/pulsar/PulsarConfiguration.java      | 15 ++++++++
 .../camel/component/pulsar/PulsarProducer.java     |  6 ++--
 .../dsl/PulsarComponentBuilderFactory.java         | 18 ++++++++++
 .../endpoint/dsl/PulsarEndpointBuilderFactory.java | 16 +++++++++
 9 files changed, 107 insertions(+), 43 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/pulsar.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/pulsar.json
index 6c5f40eeefb..83dfd3de283 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/pulsar.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/pulsar.json
@@ -58,17 +58,18 @@
     "blockIfQueueFull": { "index": 33, "kind": "property", "displayName": 
"Block If Queue Full", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, 
"configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", 
"configurationField": "configuration", "description": "Whether to block the 
producing thread if pending messages queue is full or to [...]
     "chunkingEnabled": { "index": 34, "kind": "property", "displayName": 
"Chunking Enabled", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, 
"configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", 
"configurationField": "configuration", "description": "Control whether chunking 
of messages is enabled for the producer." },
     "compressionType": { "index": 35, "kind": "property", "displayName": 
"Compression Type", "group": "producer", "label": "producer", "required": 
false, "type": "object", "javaType": 
"org.apache.pulsar.client.api.CompressionType", "enum": [ "NONE", "LZ4", 
"ZLIB", "ZSTD", "SNAPPY" ], "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": "NONE", "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"configuration", "descri [...]
-    "initialSequenceId": { "index": 36, "kind": "property", "displayName": 
"Initial Sequence Id", "group": "producer", "label": "producer", "required": 
false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": -1, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"configuration", "description": "The first message published will have a 
sequence Id of initialSequenceId 1." },
-    "lazyStartProducer": { "index": 37, "kind": "property", "displayName": 
"Lazy Start Producer", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Whether the producer should be started lazy (on the first message). By 
starting lazy you can use this to allow CamelContext and routes to startup in 
situations where a producer may otherwise fai [...]
-    "maxPendingMessages": { "index": 38, "kind": "property", "displayName": 
"Max Pending Messages", "group": "producer", "label": "producer", "required": 
false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": 1000, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"configuration", "description": "Size of the pending massages queue. When the 
queue is full, by default, any fur [...]
-    "maxPendingMessagesAcrossPartitions": { "index": 39, "kind": "property", 
"displayName": "Max Pending Messages Across Partitions", "group": "producer", 
"label": "producer", "required": false, "type": "integer", "javaType": "int", 
"deprecated": true, "autowired": false, "secret": false, "defaultValue": 50000, 
"configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", 
"configurationField": "configuration", "description": "The maximum number of 
pending messages for pa [...]
-    "messageRouter": { "index": 40, "kind": "property", "displayName": 
"Message Router", "group": "producer", "label": "producer", "required": false, 
"type": "object", "javaType": "org.apache.pulsar.client.api.MessageRouter", 
"deprecated": false, "autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"configuration", "description": "Custom Message Router to use" },
-    "messageRoutingMode": { "index": 41, "kind": "property", "displayName": 
"Message Routing Mode", "group": "producer", "label": "producer", "required": 
false, "type": "object", "javaType": 
"org.apache.pulsar.client.api.MessageRoutingMode", "enum": [ "SinglePartition", 
"RoundRobinPartition", "CustomPartition" ], "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "RoundRobinPartition", 
"configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", 
" [...]
-    "producerName": { "index": 42, "kind": "property", "displayName": 
"Producer Name", "group": "producer", "label": "producer", "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 producer. If unset, lets Pulsar 
select a unique identifier." },
-    "sendTimeoutMs": { "index": 43, "kind": "property", "displayName": "Send 
Timeout Ms", "group": "producer", "label": "producer", "required": false, 
"type": "integer", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 30000, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"configuration", "description": "Send timeout in milliseconds" },
-    "autoConfiguration": { "index": 44, "kind": "property", "displayName": 
"Auto Configuration", "group": "advanced", "label": "advanced", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.component.pulsar.utils.AutoConfiguration", "deprecated": 
false, "autowired": false, "secret": false, "description": "The pulsar auto 
configuration" },
-    "autowiredEnabled": { "index": 45, "kind": "property", "displayName": 
"Autowired Enabled", "group": "advanced", "label": "advanced", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Whether autowiring is enabled. This is used for automatic autowiring options 
(the option must be marked as autowired) by looking up in the registry to find 
if there is a single instance of matching  [...]
-    "pulsarClient": { "index": 46, "kind": "property", "displayName": "Pulsar 
Client", "group": "advanced", "label": "advanced", "required": false, "type": 
"object", "javaType": "org.apache.pulsar.client.api.PulsarClient", 
"deprecated": false, "autowired": true, "secret": false, "description": "The 
pulsar client" }
+    "hashingScheme": { "index": 36, "kind": "property", "displayName": 
"Hashing Scheme", "group": "producer", "label": "producer", "required": false, 
"type": "string", "javaType": "java.lang.String", "enum": [ "JavaStringHash", 
"Murmur3_32Hash" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "JavaStringHash", "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"configuration", "description": "Hashing function t [...]
+    "initialSequenceId": { "index": 37, "kind": "property", "displayName": 
"Initial Sequence Id", "group": "producer", "label": "producer", "required": 
false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": -1, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"configuration", "description": "The first message published will have a 
sequence Id of initialSequenceId 1." },
+    "lazyStartProducer": { "index": 38, "kind": "property", "displayName": 
"Lazy Start Producer", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Whether the producer should be started lazy (on the first message). By 
starting lazy you can use this to allow CamelContext and routes to startup in 
situations where a producer may otherwise fai [...]
+    "maxPendingMessages": { "index": 39, "kind": "property", "displayName": 
"Max Pending Messages", "group": "producer", "label": "producer", "required": 
false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": 1000, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"configuration", "description": "Size of the pending massages queue. When the 
queue is full, by default, any fur [...]
+    "maxPendingMessagesAcrossPartitions": { "index": 40, "kind": "property", 
"displayName": "Max Pending Messages Across Partitions", "group": "producer", 
"label": "producer", "required": false, "type": "integer", "javaType": "int", 
"deprecated": true, "autowired": false, "secret": false, "defaultValue": 50000, 
"configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", 
"configurationField": "configuration", "description": "The maximum number of 
pending messages for pa [...]
+    "messageRouter": { "index": 41, "kind": "property", "displayName": 
"Message Router", "group": "producer", "label": "producer", "required": false, 
"type": "object", "javaType": "org.apache.pulsar.client.api.MessageRouter", 
"deprecated": false, "autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"configuration", "description": "Custom Message Router to use" },
+    "messageRoutingMode": { "index": 42, "kind": "property", "displayName": 
"Message Routing Mode", "group": "producer", "label": "producer", "required": 
false, "type": "object", "javaType": 
"org.apache.pulsar.client.api.MessageRoutingMode", "enum": [ "SinglePartition", 
"RoundRobinPartition", "CustomPartition" ], "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "RoundRobinPartition", 
"configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", 
" [...]
+    "producerName": { "index": 43, "kind": "property", "displayName": 
"Producer Name", "group": "producer", "label": "producer", "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 producer. If unset, lets Pulsar 
select a unique identifier." },
+    "sendTimeoutMs": { "index": 44, "kind": "property", "displayName": "Send 
Timeout Ms", "group": "producer", "label": "producer", "required": false, 
"type": "integer", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 30000, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"configuration", "description": "Send timeout in milliseconds" },
+    "autoConfiguration": { "index": 45, "kind": "property", "displayName": 
"Auto Configuration", "group": "advanced", "label": "advanced", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.component.pulsar.utils.AutoConfiguration", "deprecated": 
false, "autowired": false, "secret": false, "description": "The pulsar auto 
configuration" },
+    "autowiredEnabled": { "index": 46, "kind": "property", "displayName": 
"Autowired Enabled", "group": "advanced", "label": "advanced", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Whether autowiring is enabled. This is used for automatic autowiring options 
(the option must be marked as autowired) by looking up in the registry to find 
if there is a single instance of matching  [...]
+    "pulsarClient": { "index": 47, "kind": "property", "displayName": "Pulsar 
Client", "group": "advanced", "label": "advanced", "required": false, "type": 
"object", "javaType": "org.apache.pulsar.client.api.PulsarClient", 
"deprecated": false, "autowired": true, "secret": false, "description": "The 
pulsar client" }
   },
   "headers": {
     "properties": { "index": 0, "kind": "header", "displayName": "", "group": 
"consumer", "label": "consumer", "required": false, "javaType": "Map<String, 
String>", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "The properties attached to the message.", 
"constantName": 
"org.apache.camel.component.pulsar.utils.message.PulsarMessageHeaders#PROPERTIES"
 },
@@ -128,13 +129,14 @@
     "blockIfQueueFull": { "index": 37, "kind": "parameter", "displayName": 
"Block If Queue Full", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, 
"configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", 
"configurationField": "pulsarConfiguration", "description": "Whether to block 
the producing thread if pending messages queue is ful [...]
     "chunkingEnabled": { "index": 38, "kind": "parameter", "displayName": 
"Chunking Enabled", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, 
"configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", 
"configurationField": "pulsarConfiguration", "description": "Control whether 
chunking of messages is enabled for the producer." },
     "compressionType": { "index": 39, "kind": "parameter", "displayName": 
"Compression Type", "group": "producer", "label": "producer", "required": 
false, "type": "object", "javaType": 
"org.apache.pulsar.client.api.CompressionType", "enum": [ "NONE", "LZ4", 
"ZLIB", "ZSTD", "SNAPPY" ], "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": "NONE", "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"pulsarConfiguration",  [...]
-    "initialSequenceId": { "index": 40, "kind": "parameter", "displayName": 
"Initial Sequence Id", "group": "producer", "label": "producer", "required": 
false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": -1, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"pulsarConfiguration", "description": "The first message published will have a 
sequence Id of initialSequenceId 1." },
-    "maxPendingMessages": { "index": 41, "kind": "parameter", "displayName": 
"Max Pending Messages", "group": "producer", "label": "producer", "required": 
false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": 1000, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"pulsarConfiguration", "description": "Size of the pending massages queue. When 
the queue is full, by default,  [...]
-    "maxPendingMessagesAcrossPartitions": { "index": 42, "kind": "parameter", 
"displayName": "Max Pending Messages Across Partitions", "group": "producer", 
"label": "producer", "required": false, "type": "integer", "javaType": "int", 
"deprecated": true, "autowired": false, "secret": false, "defaultValue": 50000, 
"configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", 
"configurationField": "pulsarConfiguration", "description": "The maximum number 
of pending messages [...]
-    "messageRouter": { "index": 43, "kind": "parameter", "displayName": 
"Message Router", "group": "producer", "label": "producer", "required": false, 
"type": "object", "javaType": "org.apache.pulsar.client.api.MessageRouter", 
"deprecated": false, "autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"pulsarConfiguration", "description": "Custom Message Router to use" },
-    "messageRoutingMode": { "index": 44, "kind": "parameter", "displayName": 
"Message Routing Mode", "group": "producer", "label": "producer", "required": 
false, "type": "object", "javaType": 
"org.apache.pulsar.client.api.MessageRoutingMode", "enum": [ "SinglePartition", 
"RoundRobinPartition", "CustomPartition" ], "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "RoundRobinPartition", 
"configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration",  
[...]
-    "producerName": { "index": 45, "kind": "parameter", "displayName": 
"Producer Name", "group": "producer", "label": "producer", "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 producer. If unset, lets 
Pulsar select a unique identifier." },
-    "sendTimeoutMs": { "index": 46, "kind": "parameter", "displayName": "Send 
Timeout Ms", "group": "producer", "label": "producer", "required": false, 
"type": "integer", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 30000, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"pulsarConfiguration", "description": "Send timeout in milliseconds" },
-    "lazyStartProducer": { "index": 47, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether the producer should be started 
lazy (on the first message). By starting lazy you can use this to allow 
CamelContext and routes to startup in situations where a produ [...]
+    "hashingScheme": { "index": 40, "kind": "parameter", "displayName": 
"Hashing Scheme", "group": "producer", "label": "producer", "required": false, 
"type": "string", "javaType": "java.lang.String", "enum": [ "JavaStringHash", 
"Murmur3_32Hash" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "JavaStringHash", "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"pulsarConfiguration", "description": "Hashing fun [...]
+    "initialSequenceId": { "index": 41, "kind": "parameter", "displayName": 
"Initial Sequence Id", "group": "producer", "label": "producer", "required": 
false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": -1, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"pulsarConfiguration", "description": "The first message published will have a 
sequence Id of initialSequenceId 1." },
+    "maxPendingMessages": { "index": 42, "kind": "parameter", "displayName": 
"Max Pending Messages", "group": "producer", "label": "producer", "required": 
false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": 1000, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"pulsarConfiguration", "description": "Size of the pending massages queue. When 
the queue is full, by default,  [...]
+    "maxPendingMessagesAcrossPartitions": { "index": 43, "kind": "parameter", 
"displayName": "Max Pending Messages Across Partitions", "group": "producer", 
"label": "producer", "required": false, "type": "integer", "javaType": "int", 
"deprecated": true, "autowired": false, "secret": false, "defaultValue": 50000, 
"configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", 
"configurationField": "pulsarConfiguration", "description": "The maximum number 
of pending messages [...]
+    "messageRouter": { "index": 44, "kind": "parameter", "displayName": 
"Message Router", "group": "producer", "label": "producer", "required": false, 
"type": "object", "javaType": "org.apache.pulsar.client.api.MessageRouter", 
"deprecated": false, "autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"pulsarConfiguration", "description": "Custom Message Router to use" },
+    "messageRoutingMode": { "index": 45, "kind": "parameter", "displayName": 
"Message Routing Mode", "group": "producer", "label": "producer", "required": 
false, "type": "object", "javaType": 
"org.apache.pulsar.client.api.MessageRoutingMode", "enum": [ "SinglePartition", 
"RoundRobinPartition", "CustomPartition" ], "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "RoundRobinPartition", 
"configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration",  
[...]
+    "producerName": { "index": 46, "kind": "parameter", "displayName": 
"Producer Name", "group": "producer", "label": "producer", "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 producer. If unset, lets 
Pulsar select a unique identifier." },
+    "sendTimeoutMs": { "index": 47, "kind": "parameter", "displayName": "Send 
Timeout Ms", "group": "producer", "label": "producer", "required": false, 
"type": "integer", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 30000, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"pulsarConfiguration", "description": "Send timeout in milliseconds" },
+    "lazyStartProducer": { "index": 48, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether the producer should be started 
lazy (on the first message). By starting lazy you can use this to allow 
CamelContext and routes to startup in situations where a produ [...]
   }
 }
diff --git 
a/components/camel-pulsar/src/generated/java/org/apache/camel/component/pulsar/PulsarComponentConfigurer.java
 
b/components/camel-pulsar/src/generated/java/org/apache/camel/component/pulsar/PulsarComponentConfigurer.java
index 401e0589ca8..129bd7006f7 100644
--- 
a/components/camel-pulsar/src/generated/java/org/apache/camel/component/pulsar/PulsarComponentConfigurer.java
+++ 
b/components/camel-pulsar/src/generated/java/org/apache/camel/component/pulsar/PulsarComponentConfigurer.java
@@ -71,6 +71,8 @@ public class PulsarComponentConfigurer extends 
PropertyConfigurerSupport impleme
         case "deadLetterTopic": 
getOrCreateConfiguration(target).setDeadLetterTopic(property(camelContext, 
java.lang.String.class, value)); return true;
         case "enableretry":
         case "enableRetry": 
getOrCreateConfiguration(target).setEnableRetry(property(camelContext, 
boolean.class, value)); return true;
+        case "hashingscheme":
+        case "hashingScheme": 
getOrCreateConfiguration(target).setHashingScheme(property(camelContext, 
java.lang.String.class, value)); return true;
         case "initialsequenceid":
         case "initialSequenceId": 
getOrCreateConfiguration(target).setInitialSequenceId(property(camelContext, 
long.class, value)); return true;
         case "keysharedpolicy":
@@ -176,6 +178,8 @@ public class PulsarComponentConfigurer extends 
PropertyConfigurerSupport impleme
         case "deadLetterTopic": return java.lang.String.class;
         case "enableretry":
         case "enableRetry": return boolean.class;
+        case "hashingscheme":
+        case "hashingScheme": return java.lang.String.class;
         case "initialsequenceid":
         case "initialSequenceId": return long.class;
         case "keysharedpolicy":
@@ -277,6 +281,8 @@ public class PulsarComponentConfigurer extends 
PropertyConfigurerSupport impleme
         case "deadLetterTopic": return 
getOrCreateConfiguration(target).getDeadLetterTopic();
         case "enableretry":
         case "enableRetry": return 
getOrCreateConfiguration(target).isEnableRetry();
+        case "hashingscheme":
+        case "hashingScheme": return 
getOrCreateConfiguration(target).getHashingScheme();
         case "initialsequenceid":
         case "initialSequenceId": return 
getOrCreateConfiguration(target).getInitialSequenceId();
         case "keysharedpolicy":
diff --git 
a/components/camel-pulsar/src/generated/java/org/apache/camel/component/pulsar/PulsarEndpointConfigurer.java
 
b/components/camel-pulsar/src/generated/java/org/apache/camel/component/pulsar/PulsarEndpointConfigurer.java
index 0e4231feb2f..20b74a871d0 100644
--- 
a/components/camel-pulsar/src/generated/java/org/apache/camel/component/pulsar/PulsarEndpointConfigurer.java
+++ 
b/components/camel-pulsar/src/generated/java/org/apache/camel/component/pulsar/PulsarEndpointConfigurer.java
@@ -63,6 +63,8 @@ public class PulsarEndpointConfigurer extends 
PropertyConfigurerSupport implemen
         case "exceptionHandler": 
target.setExceptionHandler(property(camelContext, 
org.apache.camel.spi.ExceptionHandler.class, value)); return true;
         case "exchangepattern":
         case "exchangePattern": 
target.setExchangePattern(property(camelContext, 
org.apache.camel.ExchangePattern.class, value)); return true;
+        case "hashingscheme":
+        case "hashingScheme": 
target.getPulsarConfiguration().setHashingScheme(property(camelContext, 
java.lang.String.class, value)); return true;
         case "initialsequenceid":
         case "initialSequenceId": 
target.getPulsarConfiguration().setInitialSequenceId(property(camelContext, 
long.class, value)); return true;
         case "keysharedpolicy":
@@ -158,6 +160,8 @@ public class PulsarEndpointConfigurer extends 
PropertyConfigurerSupport implemen
         case "exceptionHandler": return 
org.apache.camel.spi.ExceptionHandler.class;
         case "exchangepattern":
         case "exchangePattern": return org.apache.camel.ExchangePattern.class;
+        case "hashingscheme":
+        case "hashingScheme": return java.lang.String.class;
         case "initialsequenceid":
         case "initialSequenceId": return long.class;
         case "keysharedpolicy":
@@ -254,6 +258,8 @@ public class PulsarEndpointConfigurer extends 
PropertyConfigurerSupport implemen
         case "exceptionHandler": return target.getExceptionHandler();
         case "exchangepattern":
         case "exchangePattern": return target.getExchangePattern();
+        case "hashingscheme":
+        case "hashingScheme": return 
target.getPulsarConfiguration().getHashingScheme();
         case "initialsequenceid":
         case "initialSequenceId": return 
target.getPulsarConfiguration().getInitialSequenceId();
         case "keysharedpolicy":
diff --git 
a/components/camel-pulsar/src/generated/java/org/apache/camel/component/pulsar/PulsarEndpointUriFactory.java
 
b/components/camel-pulsar/src/generated/java/org/apache/camel/component/pulsar/PulsarEndpointUriFactory.java
index 7c15d4ab5aa..557e8c44cbb 100644
--- 
a/components/camel-pulsar/src/generated/java/org/apache/camel/component/pulsar/PulsarEndpointUriFactory.java
+++ 
b/components/camel-pulsar/src/generated/java/org/apache/camel/component/pulsar/PulsarEndpointUriFactory.java
@@ -21,7 +21,7 @@ public class PulsarEndpointUriFactory extends 
org.apache.camel.support.component
     private static final Set<String> SECRET_PROPERTY_NAMES;
     private static final Set<String> MULTI_VALUE_PREFIXES;
     static {
-        Set<String> props = new HashSet<>(48);
+        Set<String> props = new HashSet<>(49);
         props.add("ackGroupTimeMillis");
         props.add("ackTimeoutMillis");
         props.add("ackTimeoutRedeliveryBackoff");
@@ -43,6 +43,7 @@ public class PulsarEndpointUriFactory extends 
org.apache.camel.support.component
         props.add("enableRetry");
         props.add("exceptionHandler");
         props.add("exchangePattern");
+        props.add("hashingScheme");
         props.add("initialSequenceId");
         props.add("keySharedPolicy");
         props.add("lazyStartProducer");
diff --git 
a/components/camel-pulsar/src/generated/resources/org/apache/camel/component/pulsar/pulsar.json
 
b/components/camel-pulsar/src/generated/resources/org/apache/camel/component/pulsar/pulsar.json
index 6c5f40eeefb..83dfd3de283 100644
--- 
a/components/camel-pulsar/src/generated/resources/org/apache/camel/component/pulsar/pulsar.json
+++ 
b/components/camel-pulsar/src/generated/resources/org/apache/camel/component/pulsar/pulsar.json
@@ -58,17 +58,18 @@
     "blockIfQueueFull": { "index": 33, "kind": "property", "displayName": 
"Block If Queue Full", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, 
"configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", 
"configurationField": "configuration", "description": "Whether to block the 
producing thread if pending messages queue is full or to [...]
     "chunkingEnabled": { "index": 34, "kind": "property", "displayName": 
"Chunking Enabled", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, 
"configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", 
"configurationField": "configuration", "description": "Control whether chunking 
of messages is enabled for the producer." },
     "compressionType": { "index": 35, "kind": "property", "displayName": 
"Compression Type", "group": "producer", "label": "producer", "required": 
false, "type": "object", "javaType": 
"org.apache.pulsar.client.api.CompressionType", "enum": [ "NONE", "LZ4", 
"ZLIB", "ZSTD", "SNAPPY" ], "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": "NONE", "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"configuration", "descri [...]
-    "initialSequenceId": { "index": 36, "kind": "property", "displayName": 
"Initial Sequence Id", "group": "producer", "label": "producer", "required": 
false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": -1, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"configuration", "description": "The first message published will have a 
sequence Id of initialSequenceId 1." },
-    "lazyStartProducer": { "index": 37, "kind": "property", "displayName": 
"Lazy Start Producer", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Whether the producer should be started lazy (on the first message). By 
starting lazy you can use this to allow CamelContext and routes to startup in 
situations where a producer may otherwise fai [...]
-    "maxPendingMessages": { "index": 38, "kind": "property", "displayName": 
"Max Pending Messages", "group": "producer", "label": "producer", "required": 
false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": 1000, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"configuration", "description": "Size of the pending massages queue. When the 
queue is full, by default, any fur [...]
-    "maxPendingMessagesAcrossPartitions": { "index": 39, "kind": "property", 
"displayName": "Max Pending Messages Across Partitions", "group": "producer", 
"label": "producer", "required": false, "type": "integer", "javaType": "int", 
"deprecated": true, "autowired": false, "secret": false, "defaultValue": 50000, 
"configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", 
"configurationField": "configuration", "description": "The maximum number of 
pending messages for pa [...]
-    "messageRouter": { "index": 40, "kind": "property", "displayName": 
"Message Router", "group": "producer", "label": "producer", "required": false, 
"type": "object", "javaType": "org.apache.pulsar.client.api.MessageRouter", 
"deprecated": false, "autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"configuration", "description": "Custom Message Router to use" },
-    "messageRoutingMode": { "index": 41, "kind": "property", "displayName": 
"Message Routing Mode", "group": "producer", "label": "producer", "required": 
false, "type": "object", "javaType": 
"org.apache.pulsar.client.api.MessageRoutingMode", "enum": [ "SinglePartition", 
"RoundRobinPartition", "CustomPartition" ], "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "RoundRobinPartition", 
"configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", 
" [...]
-    "producerName": { "index": 42, "kind": "property", "displayName": 
"Producer Name", "group": "producer", "label": "producer", "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 producer. If unset, lets Pulsar 
select a unique identifier." },
-    "sendTimeoutMs": { "index": 43, "kind": "property", "displayName": "Send 
Timeout Ms", "group": "producer", "label": "producer", "required": false, 
"type": "integer", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 30000, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"configuration", "description": "Send timeout in milliseconds" },
-    "autoConfiguration": { "index": 44, "kind": "property", "displayName": 
"Auto Configuration", "group": "advanced", "label": "advanced", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.component.pulsar.utils.AutoConfiguration", "deprecated": 
false, "autowired": false, "secret": false, "description": "The pulsar auto 
configuration" },
-    "autowiredEnabled": { "index": 45, "kind": "property", "displayName": 
"Autowired Enabled", "group": "advanced", "label": "advanced", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Whether autowiring is enabled. This is used for automatic autowiring options 
(the option must be marked as autowired) by looking up in the registry to find 
if there is a single instance of matching  [...]
-    "pulsarClient": { "index": 46, "kind": "property", "displayName": "Pulsar 
Client", "group": "advanced", "label": "advanced", "required": false, "type": 
"object", "javaType": "org.apache.pulsar.client.api.PulsarClient", 
"deprecated": false, "autowired": true, "secret": false, "description": "The 
pulsar client" }
+    "hashingScheme": { "index": 36, "kind": "property", "displayName": 
"Hashing Scheme", "group": "producer", "label": "producer", "required": false, 
"type": "string", "javaType": "java.lang.String", "enum": [ "JavaStringHash", 
"Murmur3_32Hash" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "JavaStringHash", "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"configuration", "description": "Hashing function t [...]
+    "initialSequenceId": { "index": 37, "kind": "property", "displayName": 
"Initial Sequence Id", "group": "producer", "label": "producer", "required": 
false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": -1, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"configuration", "description": "The first message published will have a 
sequence Id of initialSequenceId 1." },
+    "lazyStartProducer": { "index": 38, "kind": "property", "displayName": 
"Lazy Start Producer", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Whether the producer should be started lazy (on the first message). By 
starting lazy you can use this to allow CamelContext and routes to startup in 
situations where a producer may otherwise fai [...]
+    "maxPendingMessages": { "index": 39, "kind": "property", "displayName": 
"Max Pending Messages", "group": "producer", "label": "producer", "required": 
false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": 1000, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"configuration", "description": "Size of the pending massages queue. When the 
queue is full, by default, any fur [...]
+    "maxPendingMessagesAcrossPartitions": { "index": 40, "kind": "property", 
"displayName": "Max Pending Messages Across Partitions", "group": "producer", 
"label": "producer", "required": false, "type": "integer", "javaType": "int", 
"deprecated": true, "autowired": false, "secret": false, "defaultValue": 50000, 
"configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", 
"configurationField": "configuration", "description": "The maximum number of 
pending messages for pa [...]
+    "messageRouter": { "index": 41, "kind": "property", "displayName": 
"Message Router", "group": "producer", "label": "producer", "required": false, 
"type": "object", "javaType": "org.apache.pulsar.client.api.MessageRouter", 
"deprecated": false, "autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"configuration", "description": "Custom Message Router to use" },
+    "messageRoutingMode": { "index": 42, "kind": "property", "displayName": 
"Message Routing Mode", "group": "producer", "label": "producer", "required": 
false, "type": "object", "javaType": 
"org.apache.pulsar.client.api.MessageRoutingMode", "enum": [ "SinglePartition", 
"RoundRobinPartition", "CustomPartition" ], "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "RoundRobinPartition", 
"configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", 
" [...]
+    "producerName": { "index": 43, "kind": "property", "displayName": 
"Producer Name", "group": "producer", "label": "producer", "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 producer. If unset, lets Pulsar 
select a unique identifier." },
+    "sendTimeoutMs": { "index": 44, "kind": "property", "displayName": "Send 
Timeout Ms", "group": "producer", "label": "producer", "required": false, 
"type": "integer", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 30000, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"configuration", "description": "Send timeout in milliseconds" },
+    "autoConfiguration": { "index": 45, "kind": "property", "displayName": 
"Auto Configuration", "group": "advanced", "label": "advanced", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.component.pulsar.utils.AutoConfiguration", "deprecated": 
false, "autowired": false, "secret": false, "description": "The pulsar auto 
configuration" },
+    "autowiredEnabled": { "index": 46, "kind": "property", "displayName": 
"Autowired Enabled", "group": "advanced", "label": "advanced", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Whether autowiring is enabled. This is used for automatic autowiring options 
(the option must be marked as autowired) by looking up in the registry to find 
if there is a single instance of matching  [...]
+    "pulsarClient": { "index": 47, "kind": "property", "displayName": "Pulsar 
Client", "group": "advanced", "label": "advanced", "required": false, "type": 
"object", "javaType": "org.apache.pulsar.client.api.PulsarClient", 
"deprecated": false, "autowired": true, "secret": false, "description": "The 
pulsar client" }
   },
   "headers": {
     "properties": { "index": 0, "kind": "header", "displayName": "", "group": 
"consumer", "label": "consumer", "required": false, "javaType": "Map<String, 
String>", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "The properties attached to the message.", 
"constantName": 
"org.apache.camel.component.pulsar.utils.message.PulsarMessageHeaders#PROPERTIES"
 },
@@ -128,13 +129,14 @@
     "blockIfQueueFull": { "index": 37, "kind": "parameter", "displayName": 
"Block If Queue Full", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, 
"configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", 
"configurationField": "pulsarConfiguration", "description": "Whether to block 
the producing thread if pending messages queue is ful [...]
     "chunkingEnabled": { "index": 38, "kind": "parameter", "displayName": 
"Chunking Enabled", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, 
"configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", 
"configurationField": "pulsarConfiguration", "description": "Control whether 
chunking of messages is enabled for the producer." },
     "compressionType": { "index": 39, "kind": "parameter", "displayName": 
"Compression Type", "group": "producer", "label": "producer", "required": 
false, "type": "object", "javaType": 
"org.apache.pulsar.client.api.CompressionType", "enum": [ "NONE", "LZ4", 
"ZLIB", "ZSTD", "SNAPPY" ], "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": "NONE", "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"pulsarConfiguration",  [...]
-    "initialSequenceId": { "index": 40, "kind": "parameter", "displayName": 
"Initial Sequence Id", "group": "producer", "label": "producer", "required": 
false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": -1, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"pulsarConfiguration", "description": "The first message published will have a 
sequence Id of initialSequenceId 1." },
-    "maxPendingMessages": { "index": 41, "kind": "parameter", "displayName": 
"Max Pending Messages", "group": "producer", "label": "producer", "required": 
false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": 1000, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"pulsarConfiguration", "description": "Size of the pending massages queue. When 
the queue is full, by default,  [...]
-    "maxPendingMessagesAcrossPartitions": { "index": 42, "kind": "parameter", 
"displayName": "Max Pending Messages Across Partitions", "group": "producer", 
"label": "producer", "required": false, "type": "integer", "javaType": "int", 
"deprecated": true, "autowired": false, "secret": false, "defaultValue": 50000, 
"configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", 
"configurationField": "pulsarConfiguration", "description": "The maximum number 
of pending messages [...]
-    "messageRouter": { "index": 43, "kind": "parameter", "displayName": 
"Message Router", "group": "producer", "label": "producer", "required": false, 
"type": "object", "javaType": "org.apache.pulsar.client.api.MessageRouter", 
"deprecated": false, "autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"pulsarConfiguration", "description": "Custom Message Router to use" },
-    "messageRoutingMode": { "index": 44, "kind": "parameter", "displayName": 
"Message Routing Mode", "group": "producer", "label": "producer", "required": 
false, "type": "object", "javaType": 
"org.apache.pulsar.client.api.MessageRoutingMode", "enum": [ "SinglePartition", 
"RoundRobinPartition", "CustomPartition" ], "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "RoundRobinPartition", 
"configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration",  
[...]
-    "producerName": { "index": 45, "kind": "parameter", "displayName": 
"Producer Name", "group": "producer", "label": "producer", "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 producer. If unset, lets 
Pulsar select a unique identifier." },
-    "sendTimeoutMs": { "index": 46, "kind": "parameter", "displayName": "Send 
Timeout Ms", "group": "producer", "label": "producer", "required": false, 
"type": "integer", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 30000, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"pulsarConfiguration", "description": "Send timeout in milliseconds" },
-    "lazyStartProducer": { "index": 47, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether the producer should be started 
lazy (on the first message). By starting lazy you can use this to allow 
CamelContext and routes to startup in situations where a produ [...]
+    "hashingScheme": { "index": 40, "kind": "parameter", "displayName": 
"Hashing Scheme", "group": "producer", "label": "producer", "required": false, 
"type": "string", "javaType": "java.lang.String", "enum": [ "JavaStringHash", 
"Murmur3_32Hash" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "JavaStringHash", "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"pulsarConfiguration", "description": "Hashing fun [...]
+    "initialSequenceId": { "index": 41, "kind": "parameter", "displayName": 
"Initial Sequence Id", "group": "producer", "label": "producer", "required": 
false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": -1, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"pulsarConfiguration", "description": "The first message published will have a 
sequence Id of initialSequenceId 1." },
+    "maxPendingMessages": { "index": 42, "kind": "parameter", "displayName": 
"Max Pending Messages", "group": "producer", "label": "producer", "required": 
false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": 1000, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"pulsarConfiguration", "description": "Size of the pending massages queue. When 
the queue is full, by default,  [...]
+    "maxPendingMessagesAcrossPartitions": { "index": 43, "kind": "parameter", 
"displayName": "Max Pending Messages Across Partitions", "group": "producer", 
"label": "producer", "required": false, "type": "integer", "javaType": "int", 
"deprecated": true, "autowired": false, "secret": false, "defaultValue": 50000, 
"configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration", 
"configurationField": "pulsarConfiguration", "description": "The maximum number 
of pending messages [...]
+    "messageRouter": { "index": 44, "kind": "parameter", "displayName": 
"Message Router", "group": "producer", "label": "producer", "required": false, 
"type": "object", "javaType": "org.apache.pulsar.client.api.MessageRouter", 
"deprecated": false, "autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"pulsarConfiguration", "description": "Custom Message Router to use" },
+    "messageRoutingMode": { "index": 45, "kind": "parameter", "displayName": 
"Message Routing Mode", "group": "producer", "label": "producer", "required": 
false, "type": "object", "javaType": 
"org.apache.pulsar.client.api.MessageRoutingMode", "enum": [ "SinglePartition", 
"RoundRobinPartition", "CustomPartition" ], "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "RoundRobinPartition", 
"configurationClass": "org.apache.camel.component.pulsar.PulsarConfiguration",  
[...]
+    "producerName": { "index": 46, "kind": "parameter", "displayName": 
"Producer Name", "group": "producer", "label": "producer", "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 producer. If unset, lets 
Pulsar select a unique identifier." },
+    "sendTimeoutMs": { "index": 47, "kind": "parameter", "displayName": "Send 
Timeout Ms", "group": "producer", "label": "producer", "required": false, 
"type": "integer", "javaType": "int", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 30000, "configurationClass": 
"org.apache.camel.component.pulsar.PulsarConfiguration", "configurationField": 
"pulsarConfiguration", "description": "Send timeout in milliseconds" },
+    "lazyStartProducer": { "index": 48, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether the producer should be started 
lazy (on the first message). By starting lazy you can use this to allow 
CamelContext and routes to startup in situations where a produ [...]
   }
 }
diff --git 
a/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/PulsarConfiguration.java
 
b/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/PulsarConfiguration.java
index e77fdd6c797..65bf6de0ba1 100644
--- 
a/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/PulsarConfiguration.java
+++ 
b/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/PulsarConfiguration.java
@@ -136,6 +136,10 @@ public class PulsarConfiguration implements Cloneable {
     private MessageRoutingMode messageRoutingMode = 
MessageRoutingMode.RoundRobinPartition;
     @UriParam(label = "producer", description = "Custom Message Router to use")
     private MessageRouter messageRouter;
+    @UriParam(label = "producer",
+              description = "Hashing function to use when choosing the 
partition to use for a particular message",
+              enums = "JavaStringHash,Murmur3_32Hash", defaultValue = 
"JavaStringHash")
+    private String hashingScheme = "JavaStringHash";
 
     /**
      * Returns a copy of this configuration
@@ -599,4 +603,15 @@ public class PulsarConfiguration implements Cloneable {
     public void setAuthenticationParams(String authenticationParams) {
         this.authenticationParams = authenticationParams;
     }
+
+    public String getHashingScheme() {
+        return hashingScheme;
+    }
+
+    /**
+     * Hashing function to use when choosing the partition to use for a 
particular message
+     */
+    public void setHashingScheme(String hashingScheme) {
+        this.hashingScheme = hashingScheme;
+    }
 }
diff --git 
a/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/PulsarProducer.java
 
b/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/PulsarProducer.java
index 5637837ba7c..becd99a162f 100644
--- 
a/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/PulsarProducer.java
+++ 
b/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/PulsarProducer.java
@@ -31,10 +31,7 @@ import 
org.apache.camel.component.pulsar.utils.message.PulsarMessageUtils;
 import org.apache.camel.support.DefaultAsyncProducer;
 import org.apache.camel.util.CastUtils;
 import org.apache.camel.util.ObjectHelper;
-import org.apache.pulsar.client.api.Producer;
-import org.apache.pulsar.client.api.ProducerBuilder;
-import org.apache.pulsar.client.api.PulsarClientException;
-import org.apache.pulsar.client.api.TypedMessageBuilder;
+import org.apache.pulsar.client.api.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -138,6 +135,7 @@ public class PulsarProducer extends DefaultAsyncProducer {
                         
.enableBatching(configuration.isBatchingEnabled()).batcherBuilder(configuration.getBatcherBuilder())
                         
.initialSequenceId(configuration.getInitialSequenceId())
                         .compressionType(configuration.getCompressionType())
+                        
.hashingScheme(HashingScheme.valueOf(configuration.getHashingScheme()))
                         .enableChunking(configuration.isChunkingEnabled());
                 if (ObjectHelper.isNotEmpty(configuration.getMessageRouter())) 
{
                     
producerBuilder.messageRouter(configuration.getMessageRouter());
diff --git 
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/PulsarComponentBuilderFactory.java
 
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/PulsarComponentBuilderFactory.java
index 65edab31066..dec35d33d46 100644
--- 
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/PulsarComponentBuilderFactory.java
+++ 
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/PulsarComponentBuilderFactory.java
@@ -649,6 +649,23 @@ public interface PulsarComponentBuilderFactory {
             doSetProperty("compressionType", compressionType);
             return this;
         }
+        /**
+         * Hashing function to use when choosing the partition to use for a
+         * particular message.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Default: JavaStringHash
+         * Group: producer
+         * 
+         * @param hashingScheme the value to set
+         * @return the dsl builder
+         */
+        default PulsarComponentBuilder hashingScheme(
+                java.lang.String hashingScheme) {
+            doSetProperty("hashingScheme", hashingScheme);
+            return this;
+        }
         /**
          * The first message published will have a sequence Id of
          * initialSequenceId 1.
@@ -903,6 +920,7 @@ public interface PulsarComponentBuilderFactory {
             case "blockIfQueueFull": 
getOrCreateConfiguration((PulsarComponent) 
component).setBlockIfQueueFull((boolean) value); return true;
             case "chunkingEnabled": getOrCreateConfiguration((PulsarComponent) 
component).setChunkingEnabled((boolean) value); return true;
             case "compressionType": getOrCreateConfiguration((PulsarComponent) 
component).setCompressionType((org.apache.pulsar.client.api.CompressionType) 
value); return true;
+            case "hashingScheme": getOrCreateConfiguration((PulsarComponent) 
component).setHashingScheme((java.lang.String) value); return true;
             case "initialSequenceId": 
getOrCreateConfiguration((PulsarComponent) 
component).setInitialSequenceId((long) value); return true;
             case "lazyStartProducer": ((PulsarComponent) 
component).setLazyStartProducer((boolean) value); return true;
             case "maxPendingMessages": 
getOrCreateConfiguration((PulsarComponent) 
component).setMaxPendingMessages((int) value); return true;
diff --git 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/PulsarEndpointBuilderFactory.java
 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/PulsarEndpointBuilderFactory.java
index cf93b571189..1965701bcd4 100644
--- 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/PulsarEndpointBuilderFactory.java
+++ 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/PulsarEndpointBuilderFactory.java
@@ -1193,6 +1193,22 @@ public interface PulsarEndpointBuilderFactory {
             doSetProperty("compressionType", compressionType);
             return this;
         }
+        /**
+         * Hashing function to use when choosing the partition to use for a
+         * particular message.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Default: JavaStringHash
+         * Group: producer
+         * 
+         * @param hashingScheme the value to set
+         * @return the dsl builder
+         */
+        default PulsarEndpointProducerBuilder hashingScheme(String 
hashingScheme) {
+            doSetProperty("hashingScheme", hashingScheme);
+            return this;
+        }
         /**
          * The first message published will have a sequence Id of
          * initialSequenceId 1.

Reply via email to