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 4fd8060a3cd1b46bd2c89640fb1fc56b485d8ab2 Author: Andrea Cosentino <anco...@gmail.com> AuthorDate: Fri May 24 13:22:30 2019 +0200 CAMEL-13570 - Camel AWS-SQS: Make the autocreation of the queue configurable --- .../src/main/docs/aws-sqs-component.adoc | 5 ++--- .../camel/component/aws/sqs/SqsConfiguration.java | 15 ++++++++++++- .../camel/component/aws/sqs/SqsConsumer.java | 4 +++- .../camel/component/aws/sqs/SqsEndpoint.java | 2 +- .../aws/sqs/SqsComponentConfigurationTest.java | 15 +++++++++++++ .../sqs/springboot/SqsComponentConfiguration.java | 25 +++++++++++----------- 6 files changed, 47 insertions(+), 19 deletions(-) diff --git a/components/camel-aws-sqs/src/main/docs/aws-sqs-component.adoc b/components/camel-aws-sqs/src/main/docs/aws-sqs-component.adoc index 4784854..a4ff572 100644 --- a/components/camel-aws-sqs/src/main/docs/aws-sqs-component.adoc +++ b/components/camel-aws-sqs/src/main/docs/aws-sqs-component.adoc @@ -27,7 +27,7 @@ The queue will be created if they don't already exists. + // component options: START -The AWS Simple Queue Service component supports 6 options, which are listed below. +The AWS Simple Queue Service component supports 5 options, which are listed below. @@ -39,7 +39,6 @@ The AWS Simple Queue Service component supports 6 options, which are listed belo | *secretKey* (common) | Amazon AWS Secret Key | | String | *region* (common) | Specify the queue region which could be used with queueOwnerAWSAccountId to build the service URL. | | String | *resolveProperty Placeholders* (advanced) | Whether the component should resolve property placeholders on itself when starting. Only properties which are of String type can use property placeholders. | true | boolean -| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean |=== // component options: END @@ -77,6 +76,7 @@ with the following path and query parameters: | Name | Description | Default | Type | *amazonAWSHost* (common) | The hostname of the Amazon AWS cloud. | amazonaws.com | String | *amazonSQSClient* (common) | To use the AmazonSQS as client | | AmazonSQS +| *autoCreateQueue* (common) | Setting the autocreation of the queue | false | boolean | *headerFilterStrategy* (common) | To use a custom HeaderFilterStrategy to map headers to/from Camel. | | HeaderFilterStrategy | *queueOwnerAWSAccountId* (common) | Specify the queue owner aws account id when you need to connect the queue with different account owner. | | String | *region* (common) | Specify the queue region which could be used with queueOwnerAWSAccountId to build the service URL. | | String @@ -102,7 +102,6 @@ with the following path and query parameters: | *messageDeduplicationId Strategy* (producer) | Only for FIFO queues. Strategy for setting the messageDeduplicationId on the message. Can be one of the following options: useExchangeId, useContentBasedDeduplication. For the useContentBasedDeduplication option, no messageDeduplicationId will be set on the message. | useExchangeId | MessageDeduplicationId Strategy | *messageGroupIdStrategy* (producer) | Only for FIFO queues. Strategy for setting the messageGroupId on the message. Can be one of the following options: useConstant, useExchangeId, usePropertyValue. For the usePropertyValue option, the value of property CamelAwsMessageGroupId will be used. | | MessageGroupIdStrategy | *operation* (producer) | The operation to do in case the user don't want to send only a message | | SqsOperations -| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean | *delayQueue* (advanced) | Define if you want to apply delaySeconds option to the queue or on single messages | false | boolean | *queueUrl* (advanced) | To define the queueUrl explicitly. All other parameters, which would influence the queueUrl, are ignored. This parameter is intended to be used, to connect to a mock implementation of SQS, for testing purposes. | | String | *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean diff --git a/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsConfiguration.java b/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsConfiguration.java index 9e01171..3a17d7a 100644 --- a/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsConfiguration.java +++ b/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsConfiguration.java @@ -43,6 +43,8 @@ public class SqsConfiguration implements Cloneable { private String proxyHost; @UriParam(label = "proxy") private Integer proxyPort; + @UriParam + private boolean autoCreateQueue = true; // consumer properties @UriParam(label = "consumer", defaultValue = "true") @@ -490,11 +492,22 @@ public class SqsConfiguration implements Cloneable { this.operation = operation; } + public boolean isAutoCreateQueue() { + return autoCreateQueue; + } + + /** + * Setting the autocreation of the queue + */ + public void setAutoCreateQueue(boolean autoCreateQueue) { + this.autoCreateQueue = autoCreateQueue; + } + // ************************************************* // // ************************************************* - public SqsConfiguration copy() { + public SqsConfiguration copy() { try { return (SqsConfiguration)super.clone(); } catch (CloneNotSupportedException e) { diff --git a/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsConsumer.java b/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsConsumer.java index 8d3694d..b6892be 100644 --- a/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsConsumer.java +++ b/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsConsumer.java @@ -110,7 +110,9 @@ public class SqsConsumer extends ScheduledBatchPollingConsumer { public void reConnectToQueue() { try { - getEndpoint().createQueue(getClient()); + if (getEndpoint().getConfiguration().isAutoCreateQueue()) { + getEndpoint().createQueue(getClient()); + } } catch (QueueDeletedRecentlyException qdr) { log.debug("Queue recently deleted, will retry in 30 seconds."); try { diff --git a/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsEndpoint.java b/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsEndpoint.java index d7e8579..18fd053 100644 --- a/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsEndpoint.java +++ b/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsEndpoint.java @@ -142,7 +142,7 @@ public class SqsEndpoint extends ScheduledPollEndpoint implements HeaderFilterSt } } - if (queueUrl == null) { + if (queueUrl == null && configuration.isAutoCreateQueue()) { createQueue(client); } else { log.debug("Using Amazon SQS queue url: {}", queueUrl); diff --git a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsComponentConfigurationTest.java b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsComponentConfigurationTest.java index 201539d..b80ff53 100644 --- a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsComponentConfigurationTest.java +++ b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsComponentConfigurationTest.java @@ -264,4 +264,19 @@ public class SqsComponentConfigurationTest extends CamelTestSupport { assertEquals("yyyyy", endpoint.getConfiguration().getSecretKey()); assertEquals("US_EAST_1", endpoint.getConfiguration().getRegion()); } + + @Test + public void createEndpointWithoutAutoCreation() throws Exception { + SqsComponent component = new SqsComponent(context); + component.setAccessKey("XXX"); + component.setSecretKey("YYY"); + component.setRegion(Regions.US_WEST_1.toString()); + SqsEndpoint endpoint = (SqsEndpoint)component.createEndpoint("aws-sqs://MyQueue?accessKey=xxxxxx&secretKey=yyyyy®ion=US_EAST_1&autoCreateQueue=false"); + + assertEquals("MyQueue", endpoint.getConfiguration().getQueueName()); + assertEquals("xxxxxx", endpoint.getConfiguration().getAccessKey()); + assertEquals("yyyyy", endpoint.getConfiguration().getSecretKey()); + assertEquals("US_EAST_1", endpoint.getConfiguration().getRegion()); + assertEquals(false, endpoint.getConfiguration().isAutoCreateQueue()); + } } diff --git a/platforms/spring-boot/components-starter/camel-aws-sqs-starter/src/main/java/org/apache/camel/component/aws/sqs/springboot/SqsComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-aws-sqs-starter/src/main/java/org/apache/camel/component/aws/sqs/springboot/SqsComponentConfiguration.java index b3f0896..3082327 100644 --- a/platforms/spring-boot/components-starter/camel-aws-sqs-starter/src/main/java/org/apache/camel/component/aws/sqs/springboot/SqsComponentConfiguration.java +++ b/platforms/spring-boot/components-starter/camel-aws-sqs-starter/src/main/java/org/apache/camel/component/aws/sqs/springboot/SqsComponentConfiguration.java @@ -62,11 +62,6 @@ public class SqsComponentConfiguration * placeholders. */ private Boolean resolvePropertyPlaceholders = true; - /** - * Whether the component should use basic property binding (Camel 2.x) or - * the newer property binding with additional capabilities - */ - private Boolean basicPropertyBinding = false; public SqsConfigurationNestedConfiguration getConfiguration() { return configuration; @@ -110,14 +105,6 @@ public class SqsComponentConfiguration this.resolvePropertyPlaceholders = resolvePropertyPlaceholders; } - public Boolean getBasicPropertyBinding() { - return basicPropertyBinding; - } - - public void setBasicPropertyBinding(Boolean basicPropertyBinding) { - this.basicPropertyBinding = basicPropertyBinding; - } - public static class SqsConfigurationNestedConfiguration { public static final Class CAMEL_NESTED_CLASS = org.apache.camel.component.aws.sqs.SqsConfiguration.class; /** @@ -287,6 +274,10 @@ public class SqsComponentConfiguration * message */ private SqsOperations operation; + /** + * Setting the autocreation of the queue + */ + private Boolean autoCreateQueue = false; public String getAmazonAWSHost() { return amazonAWSHost; @@ -547,5 +538,13 @@ public class SqsComponentConfiguration public void setOperation(SqsOperations operation) { this.operation = operation; } + + public Boolean getAutoCreateQueue() { + return autoCreateQueue; + } + + public void setAutoCreateQueue(Boolean autoCreateQueue) { + this.autoCreateQueue = autoCreateQueue; + } } } \ No newline at end of file