This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
commit 56cb7e3f0496cd757726cadbdb3065ab9729daea Author: Andrea Cosentino <anco...@gmail.com> AuthorDate: Fri Sep 20 12:37:37 2019 +0200 CAMEL-14001 - Camel-Pulsar: Add MessageRoutingMode and MessageRouter option to producer, messageRouter option --- .../src/main/docs/pulsar-component.adoc | 3 ++- .../camel/component/pulsar/PulsarProducer.java | 9 ++++++-- .../pulsar/configuration/PulsarConfiguration.java | 14 +++++++++++++ .../endpoint/dsl/PulsarEndpointBuilderFactory.java | 24 ++++++++++++++++++++++ 4 files changed, 47 insertions(+), 3 deletions(-) diff --git a/components/camel-pulsar/src/main/docs/pulsar-component.adoc b/components/camel-pulsar/src/main/docs/pulsar-component.adoc index fa40b34..3e19465 100644 --- a/components/camel-pulsar/src/main/docs/pulsar-component.adoc +++ b/components/camel-pulsar/src/main/docs/pulsar-component.adoc @@ -69,7 +69,7 @@ with the following path and query parameters: |=== -=== Query Parameters (26 parameters): +=== Query Parameters (27 parameters): [width="100%",cols="2,5,^1,2",options="header"] @@ -96,6 +96,7 @@ with the following path and query parameters: | *lazyStartProducer* (producer) | 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 fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and [...] | *maxPendingMessages* (producer) | Set the max size of the queue holding the messages pending to receive an acknowledgment from the broker. Default is 1000. | 1000 | int | *maxPendingMessagesAcross Partitions* (producer) | Set the number of max pending messages across all the partitions. Default is 50000. | 50000 | int +| *messageRouter* (producer) | Set a custom Message Router. | | MessageRouter | *messageRoutingMode* (producer) | Set the message routing mode for the producer. | RoundRobinPartition | MessageRoutingMode | *producerName* (producer) | Name of the producer | default-producer | String | *sendTimeoutMs* (producer) | Send timeout in milliseconds. Defaults to 30,000ms (30 seconds) | 30000 | int 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 f4a5646..d7c8b0a 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 @@ -25,6 +25,7 @@ import org.apache.camel.TypeConversionException; import org.apache.camel.component.pulsar.configuration.PulsarConfiguration; import org.apache.camel.component.pulsar.utils.message.PulsarMessageUtils; import org.apache.camel.support.DefaultProducer; +import org.apache.camel.util.ObjectHelper; import org.apache.pulsar.client.api.Producer; import org.apache.pulsar.client.api.ProducerBuilder; @@ -73,8 +74,12 @@ public class PulsarProducer extends DefaultProducer { .batchingMaxMessages(configuration.getMaxPendingMessages()) .enableBatching(configuration.isBatchingEnabled()) .initialSequenceId(configuration.getInitialSequenceId()) - .compressionType(configuration.getCompressionType()) - .messageRoutingMode(configuration.getMessageRoutingMode()); + .compressionType(configuration.getCompressionType()); + if (ObjectHelper.isNotEmpty(configuration.getMessageRouter())) { + producerBuilder.messageRouter(configuration.getMessageRouter()); + } else { + producerBuilder.messageRoutingMode(configuration.getMessageRoutingMode()); + } producer = producerBuilder.create(); } } diff --git a/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/configuration/PulsarConfiguration.java b/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/configuration/PulsarConfiguration.java index 4366166..ea34312 100644 --- a/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/configuration/PulsarConfiguration.java +++ b/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/configuration/PulsarConfiguration.java @@ -23,6 +23,7 @@ import org.apache.camel.component.pulsar.utils.consumers.SubscriptionType; import org.apache.camel.spi.UriParam; import org.apache.camel.spi.UriParams; import org.apache.pulsar.client.api.CompressionType; +import org.apache.pulsar.client.api.MessageRouter; import org.apache.pulsar.client.api.MessageRoutingMode; import static org.apache.camel.component.pulsar.utils.consumers.SubscriptionType.EXCLUSIVE; @@ -72,6 +73,8 @@ public class PulsarConfiguration { private CompressionType compressionType = CompressionType.NONE; @UriParam(label = "producer", description = "MessageRoutingMode", defaultValue = "RoundRobinPartition") private MessageRoutingMode messageRoutingMode = MessageRoutingMode.RoundRobinPartition; + @UriParam(label = "producer", description = "Custom Message Router") + private MessageRouter messageRouter; public String getSubscriptionName() { return subscriptionName; @@ -319,6 +322,17 @@ public class PulsarConfiguration { public void setMessageRoutingMode(MessageRoutingMode messageRoutingMode) { this.messageRoutingMode = messageRoutingMode; } + + /** + * Set a custom Message Router. + */ + public MessageRouter getMessageRouter() { + return messageRouter; + } + + public void setMessageRouter(MessageRouter messageRouter) { + this.messageRouter = messageRouter; + } } diff --git a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/PulsarEndpointBuilderFactory.java b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/PulsarEndpointBuilderFactory.java index 943e2f1..ace4f65 100644 --- a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/PulsarEndpointBuilderFactory.java +++ b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/PulsarEndpointBuilderFactory.java @@ -667,6 +667,30 @@ public interface PulsarEndpointBuilderFactory { return this; } /** + * Set a custom Message Router. + * + * The option is a: + * <code>org.apache.pulsar.client.api.MessageRouter</code> type. + * + * Group: producer + */ + default PulsarEndpointProducerBuilder messageRouter(Object messageRouter) { + doSetProperty("messageRouter", messageRouter); + return this; + } + /** + * Set a custom Message Router. + * + * The option will be converted to a + * <code>org.apache.pulsar.client.api.MessageRouter</code> type. + * + * Group: producer + */ + default PulsarEndpointProducerBuilder messageRouter(String messageRouter) { + doSetProperty("messageRouter", messageRouter); + return this; + } + /** * Set the message routing mode for the producer. * * The option is a: