This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push:
new b0a0823 CAMEL-16106: camel-seda - Endpoints with custom queueSize to
create queue lazy
b0a0823 is described below
commit b0a0823616d570754519fae65c273152d85d7a92
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Jan 29 17:47:39 2021 +0100
CAMEL-16106: camel-seda - Endpoints with custom queueSize to create queue
lazy
---
.../apache/camel/component/seda/SedaComponent.java | 20 +++++++++++++++++++-
.../apache/camel/component/seda/SedaEndpoint.java | 15 ++++++++++-----
.../apache/camel/component/seda/SedaSizeTest.java | 2 +-
3 files changed, 30 insertions(+), 7 deletions(-)
diff --git
a/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaComponent.java
b/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaComponent.java
index 2b88bc5..78b7679 100644
---
a/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaComponent.java
+++
b/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaComponent.java
@@ -51,6 +51,7 @@ public class SedaComponent extends DefaultComponent {
private long defaultOfferTimeout;
private final Map<String, QueueReference> queues = new HashMap<>();
+ private final Map<String, Integer> customSize = new HashMap<>();
public SedaComponent() {
}
@@ -130,11 +131,16 @@ public class SedaComponent extends DefaultComponent {
public synchronized QueueReference getOrCreateQueue(
SedaEndpoint endpoint, Integer size, Boolean multipleConsumers,
BlockingQueueFactory<Exchange> customQueueFactory) {
+
String key = getQueueKey(endpoint.getEndpointUri());
+ if (size == null) {
+ // there may be a custom size during startup
+ size = customSize.get(key);
+ }
+
QueueReference ref = getQueues().get(key);
if (ref != null) {
-
// if the given size is not provided, we just use the existing
queue as is
if (size != null && !size.equals(ref.getSize())) {
// there is already a queue, so make sure the size matches
@@ -229,6 +235,17 @@ public class SedaComponent extends DefaultComponent {
// if offerTimeout is set on endpoint, defaultOfferTimeout is ignored.
long offerTimeout = getAndRemoveParameter(parameters, "offerTimeout",
long.class, defaultOfferTimeout);
+ // using custom size?
+ Integer size = getAndRemoveParameter(parameters, "size",
Integer.class);
+ if (size != null) {
+ answer.setSize(size);
+ // this queue has a custom size remember this while setting up
routes
+ if (!getCamelContext().isStarted()) {
+ String key = getQueueKey(uri);
+ customSize.put(key, size);
+ }
+ }
+
answer.setOfferTimeout(offerTimeout);
answer.setBlockWhenFull(blockWhenFull);
answer.setDiscardWhenFull(discardWhenFull);
@@ -259,6 +276,7 @@ public class SedaComponent extends DefaultComponent {
@Override
protected void doStop() throws Exception {
getQueues().clear();
+ customSize.clear();
super.doStop();
}
diff --git
a/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaEndpoint.java
b/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaEndpoint.java
index 6af015b..da90364 100644
---
a/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaEndpoint.java
+++
b/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaEndpoint.java
@@ -526,11 +526,6 @@ public class SedaEndpoint extends DefaultEndpoint
implements AsyncEndpoint, Brow
+ " You can only either discard
or block when full.");
}
- // force creating queue when starting
- if (queue == null) {
- queue = getQueue();
- }
-
// special for unit testing where we can set a system property to make
seda poll faster
// and therefore also react faster upon shutdown, which makes overall
testing faster of the Camel project
String override = System.getProperty("CamelSedaPollTimeout", "" +
getPollTimeout());
@@ -538,6 +533,16 @@ public class SedaEndpoint extends DefaultEndpoint
implements AsyncEndpoint, Brow
}
@Override
+ protected void doStart() throws Exception {
+ super.doStart();
+
+ // force creating queue when starting
+ if (queue == null) {
+ queue = getQueue();
+ }
+ }
+
+ @Override
public void stop() {
if (getConsumers().isEmpty()) {
super.stop();
diff --git
a/core/camel-core/src/test/java/org/apache/camel/component/seda/SedaSizeTest.java
b/core/camel-core/src/test/java/org/apache/camel/component/seda/SedaSizeTest.java
index 0694d65..d1c3a43 100644
---
a/core/camel-core/src/test/java/org/apache/camel/component/seda/SedaSizeTest.java
+++
b/core/camel-core/src/test/java/org/apache/camel/component/seda/SedaSizeTest.java
@@ -36,7 +36,7 @@ public class SedaSizeTest extends ContextTestSupport {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
- from("direct:start").to("seda:bar?size=5");
+ from("direct:start").to("seda:bar");
from("seda:bar?size=5").to("mock:bar");
}