This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-spring-boot.git
The following commit(s) were added to refs/heads/main by this push:
new 3df0c455a37 CAMEL-18871 - Application does not recover (threads are
WAITING) when NettyProducer pool is exhausted (#697)
3df0c455a37 is described below
commit 3df0c455a37c3681fcb5c9285edecc888ef7997a
Author: Vincenzo Galluccio <[email protected]>
AuthorDate: Sat Jan 14 08:21:26 2023 +0100
CAMEL-18871 - Application does not recover (threads are WAITING) when
NettyProducer pool is exhausted (#697)
* CAMEL-18871 - camel-netty-starter - Add new params
* CAMEL-18871 - camel-netty-starter - Add new params
* CAMEL-18871 - camel-netty-starter - Add new params
---
.../camel/springboot/catalog/components/netty.json | 4 +++
.../camel-netty-starter/src/main/docs/netty.json | 16 ++++++++++-
.../springboot/NettyComponentConfiguration.java | 32 +++++++++++++++++++++-
3 files changed, 50 insertions(+), 2 deletions(-)
diff --git
a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/netty.json
b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/netty.json
index 907f273fc37..063e211a943 100644
---
a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/netty.json
+++
b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/netty.json
@@ -53,9 +53,11 @@
"clientInitializerFactory": { "kind": "property", "displayName": "Client
Initializer Factory", "group": "producer (advanced)", "label":
"producer,advanced", "required": false, "type": "object", "javaType":
"org.apache.camel.component.netty.ClientInitializerFactory", "deprecated":
false, "autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.netty.NettyConfiguration", "configurationField":
"configuration", "description": "To use a custom ClientInitializ [...]
"correlationManager": { "kind": "property", "displayName": "Correlation
Manager", "group": "producer (advanced)", "label": "producer,advanced",
"required": false, "type": "object", "javaType":
"org.apache.camel.component.netty.NettyCamelStateCorrelationManager",
"deprecated": false, "autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.netty.NettyConfiguration", "configurationField":
"configuration", "description": "To use a custom correlation manager [...]
"lazyChannelCreation": { "kind": "property", "displayName": "Lazy Channel
Creation", "group": "producer (advanced)", "label": "producer,advanced",
"required": false, "type": "boolean", "javaType": "boolean", "deprecated":
false, "autowired": false, "secret": false, "defaultValue": true,
"configurationClass": "org.apache.camel.component.netty.NettyConfiguration",
"configurationField": "configuration", "description": "Channels can be lazily
created to avoid exceptions, if the remote se [...]
+ "producerPoolBlockWhenExhausted": { "kind": "property", "displayName":
"Producer Pool Block When Exhausted", "group": "producer (advanced)", "label":
"producer,advanced", "required": false, "type": "boolean", "javaType":
"boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": true, "configurationClass":
"org.apache.camel.component.netty.NettyConfiguration", "configurationField":
"configuration", "description": "Sets the value for the blockWhenExhausted co
[...]
"producerPoolEnabled": { "kind": "property", "displayName": "Producer Pool
Enabled", "group": "producer (advanced)", "label": "producer,advanced",
"required": false, "type": "boolean", "javaType": "boolean", "deprecated":
false, "autowired": false, "secret": false, "defaultValue": true,
"configurationClass": "org.apache.camel.component.netty.NettyConfiguration",
"configurationField": "configuration", "description": "Whether producer pool is
enabled or not. Important: If you turn this [...]
"producerPoolMaxIdle": { "kind": "property", "displayName": "Producer Pool
Max Idle", "group": "producer (advanced)", "label": "producer,advanced",
"required": false, "type": "integer", "javaType": "int", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": 100, "configurationClass":
"org.apache.camel.component.netty.NettyConfiguration", "configurationField":
"configuration", "description": "Sets the cap on the number of idle instances
in the pool." },
"producerPoolMaxTotal": { "kind": "property", "displayName": "Producer
Pool Max Total", "group": "producer (advanced)", "label": "producer,advanced",
"required": false, "type": "integer", "javaType": "int", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": -1, "configurationClass":
"org.apache.camel.component.netty.NettyConfiguration", "configurationField":
"configuration", "description": "Sets the cap on the number of objects that can
be allocated by the pool [...]
+ "producerPoolMaxWait": { "kind": "property", "displayName": "Producer Pool
Max Wait", "group": "producer (advanced)", "label": "producer,advanced",
"required": false, "type": "integer", "javaType": "long", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": -1, "configurationClass":
"org.apache.camel.component.netty.NettyConfiguration", "configurationField":
"configuration", "description": "Sets the maximum duration (value in millis)
the borrowObject() method sh [...]
"producerPoolMinEvictableIdle": { "kind": "property", "displayName":
"Producer Pool Min Evictable Idle", "group": "producer (advanced)", "label":
"producer,advanced", "required": false, "type": "integer", "javaType": "long",
"deprecated": false, "autowired": false, "secret": false, "defaultValue":
300000, "configurationClass":
"org.apache.camel.component.netty.NettyConfiguration", "configurationField":
"configuration", "description": "Sets the minimum amount of time (value in
millis) [...]
"producerPoolMinIdle": { "kind": "property", "displayName": "Producer Pool
Min Idle", "group": "producer (advanced)", "label": "producer,advanced",
"required": false, "type": "integer", "javaType": "int", "deprecated": false,
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.netty.NettyConfiguration", "configurationField":
"configuration", "description": "Sets the minimum number of instances allowed
in the producer pool before the evictor thread ( [...]
"udpConnectionlessSending": { "kind": "property", "displayName": "Udp
Connectionless Sending", "group": "producer (advanced)", "label":
"producer,advanced", "required": false, "type": "boolean", "javaType":
"boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "configurationClass":
"org.apache.camel.component.netty.NettyConfiguration", "configurationField":
"configuration", "description": "This option supports connection less udp
sending which is [...]
@@ -143,9 +145,11 @@
"correlationManager": { "kind": "parameter", "displayName": "Correlation
Manager", "group": "producer (advanced)", "label": "producer,advanced",
"required": false, "type": "object", "javaType":
"org.apache.camel.component.netty.NettyCamelStateCorrelationManager",
"deprecated": false, "autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.netty.NettyConfiguration", "configurationField":
"configuration", "description": "To use a custom correlation manage [...]
"lazyChannelCreation": { "kind": "parameter", "displayName": "Lazy Channel
Creation", "group": "producer (advanced)", "label": "producer,advanced",
"required": false, "type": "boolean", "javaType": "boolean", "deprecated":
false, "autowired": false, "secret": false, "defaultValue": true,
"configurationClass": "org.apache.camel.component.netty.NettyConfiguration",
"configurationField": "configuration", "description": "Channels can be lazily
created to avoid exceptions, if the remote s [...]
"lazyStartProducer": { "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 producer may other [...]
+ "producerPoolBlockWhenExhausted": { "kind": "parameter", "displayName":
"Producer Pool Block When Exhausted", "group": "producer (advanced)", "label":
"producer,advanced", "required": false, "type": "boolean", "javaType":
"boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": true, "configurationClass":
"org.apache.camel.component.netty.NettyConfiguration", "configurationField":
"configuration", "description": "Sets the value for the blockWhenExhausted c
[...]
"producerPoolEnabled": { "kind": "parameter", "displayName": "Producer
Pool Enabled", "group": "producer (advanced)", "label": "producer,advanced",
"required": false, "type": "boolean", "javaType": "boolean", "deprecated":
false, "autowired": false, "secret": false, "defaultValue": true,
"configurationClass": "org.apache.camel.component.netty.NettyConfiguration",
"configurationField": "configuration", "description": "Whether producer pool is
enabled or not. Important: If you turn thi [...]
"producerPoolMaxIdle": { "kind": "parameter", "displayName": "Producer
Pool Max Idle", "group": "producer (advanced)", "label": "producer,advanced",
"required": false, "type": "integer", "javaType": "int", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": 100, "configurationClass":
"org.apache.camel.component.netty.NettyConfiguration", "configurationField":
"configuration", "description": "Sets the cap on the number of idle instances
in the pool." },
"producerPoolMaxTotal": { "kind": "parameter", "displayName": "Producer
Pool Max Total", "group": "producer (advanced)", "label": "producer,advanced",
"required": false, "type": "integer", "javaType": "int", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": -1, "configurationClass":
"org.apache.camel.component.netty.NettyConfiguration", "configurationField":
"configuration", "description": "Sets the cap on the number of objects that can
be allocated by the poo [...]
+ "producerPoolMaxWait": { "kind": "parameter", "displayName": "Producer
Pool Max Wait", "group": "producer (advanced)", "label": "producer,advanced",
"required": false, "type": "integer", "javaType": "long", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": -1, "configurationClass":
"org.apache.camel.component.netty.NettyConfiguration", "configurationField":
"configuration", "description": "Sets the maximum duration (value in millis)
the borrowObject() method s [...]
"producerPoolMinEvictableIdle": { "kind": "parameter", "displayName":
"Producer Pool Min Evictable Idle", "group": "producer (advanced)", "label":
"producer,advanced", "required": false, "type": "integer", "javaType": "long",
"deprecated": false, "autowired": false, "secret": false, "defaultValue":
300000, "configurationClass":
"org.apache.camel.component.netty.NettyConfiguration", "configurationField":
"configuration", "description": "Sets the minimum amount of time (value in
millis [...]
"producerPoolMinIdle": { "kind": "parameter", "displayName": "Producer
Pool Min Idle", "group": "producer (advanced)", "label": "producer,advanced",
"required": false, "type": "integer", "javaType": "int", "deprecated": false,
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.netty.NettyConfiguration", "configurationField":
"configuration", "description": "Sets the minimum number of instances allowed
in the producer pool before the evictor thread [...]
"udpConnectionlessSending": { "kind": "parameter", "displayName": "Udp
Connectionless Sending", "group": "producer (advanced)", "label":
"producer,advanced", "required": false, "type": "boolean", "javaType":
"boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "configurationClass":
"org.apache.camel.component.netty.NettyConfiguration", "configurationField":
"configuration", "description": "This option supports connection less udp
sending which i [...]
diff --git a/components-starter/camel-netty-starter/src/main/docs/netty.json
b/components-starter/camel-netty-starter/src/main/docs/netty.json
index 5f4950cc5ec..278ee0e622d 100644
--- a/components-starter/camel-netty-starter/src/main/docs/netty.json
+++ b/components-starter/camel-netty-starter/src/main/docs/netty.json
@@ -277,6 +277,13 @@
"description": "Password setting to use in order to encrypt\/decrypt
payloads sent using SSH",
"sourceType":
"org.apache.camel.component.netty.springboot.NettyComponentConfiguration"
},
+ {
+ "name": "camel.component.netty.producer-pool-block-when-exhausted",
+ "type": "java.lang.Boolean",
+ "description": "Sets the value for the blockWhenExhausted configuration
attribute. It determines whether to block when the borrowObject() method is
invoked when the pool is exhausted (the maximum number of active objects has
been reached).",
+ "sourceType":
"org.apache.camel.component.netty.springboot.NettyComponentConfiguration",
+ "defaultValue": true
+ },
{
"name": "camel.component.netty.producer-pool-enabled",
"type": "java.lang.Boolean",
@@ -298,6 +305,13 @@
"sourceType":
"org.apache.camel.component.netty.springboot.NettyComponentConfiguration",
"defaultValue": -1
},
+ {
+ "name": "camel.component.netty.producer-pool-max-wait",
+ "type": "java.lang.Long",
+ "description": "Sets the maximum duration (value in millis) the
borrowObject() method should block before throwing an exception when the pool
is exhausted and producerPoolBlockWhenExhausted is true. When less than 0, the
borrowObject() method may block indefinitely.",
+ "sourceType":
"org.apache.camel.component.netty.springboot.NettyComponentConfiguration",
+ "defaultValue": -1
+ },
{
"name": "camel.component.netty.producer-pool-min-evictable-idle",
"type": "java.lang.Long",
@@ -504,4 +518,4 @@
}
],
"hints": []
-}
\ No newline at end of file
+}
diff --git
a/components-starter/camel-netty-starter/src/main/java/org/apache/camel/component/netty/springboot/NettyComponentConfiguration.java
b/components-starter/camel-netty-starter/src/main/java/org/apache/camel/component/netty/springboot/NettyComponentConfiguration.java
index daf4fb28a47..6515e972f22 100644
---
a/components-starter/camel-netty-starter/src/main/java/org/apache/camel/component/netty/springboot/NettyComponentConfiguration.java
+++
b/components-starter/camel-netty-starter/src/main/java/org/apache/camel/component/netty/springboot/NettyComponentConfiguration.java
@@ -245,6 +245,13 @@ public class NettyComponentConfiguration
* is not up and running when the Camel producer is started.
*/
private Boolean lazyChannelCreation = true;
+ /**
+ * Sets the value for the blockWhenExhausted configuration attribute.
+ * It determines whether to block when the borrowObject() method is
+ * invoked when the pool is exhausted (the maximum number of "active"
+ * objects has been reached).
+ */
+ private Boolean producerPoolBlockWhenExhausted = true;
/**
* Whether producer pool is enabled or not. Important: If you turn this off
* then a single shared connection is used for the producer, also if you
are
@@ -268,6 +275,13 @@ public class NettyComponentConfiguration
* a negative value for no limit.
*/
private Integer producerPoolMaxTotal = -1;
+ /**
+ * Sets the maximum duration (value in millis) the borrowObject() method
+ * should block before throwing an exception when the pool is exhausted
+ * and producerPoolBlockWhenExhausted is true. When less than 0,
+ * the borrowObject() method may block indefinitely.
+ */
+ private Long producerPoolMaxWait = -1;
/**
* Sets the minimum amount of time (value in millis) an object may sit idle
* in the pool before it is eligible for eviction by the idle object
@@ -739,6 +753,14 @@ public class NettyComponentConfiguration
this.lazyChannelCreation = lazyChannelCreation;
}
+ public Boolean getProducerPoolBlockWhenExhausted() {
+ return producerPoolBlockWhenExhausted;
+ }
+
+ public void setProducerPoolBlockWhenExhausted(Boolean
producerPoolBlockWhenExhausted) {
+ this.producerPoolBlockWhenExhausted = producerPoolBlockWhenExhausted;
+ }
+
public Boolean getProducerPoolEnabled() {
return producerPoolEnabled;
}
@@ -763,6 +785,14 @@ public class NettyComponentConfiguration
this.producerPoolMaxTotal = producerPoolMaxTotal;
}
+ public Long getProducerPoolMaxWait() {
+ return producerPoolMaxWait;
+ }
+
+ public void setProducerPoolMaxWait(Long producerPoolMaxWait) {
+ this.producerPoolMaxWait = producerPoolMaxWait;
+ }
+
public Long getProducerPoolMinEvictableIdle() {
return producerPoolMinEvictableIdle;
}
@@ -1077,4 +1107,4 @@ public class NettyComponentConfiguration
Boolean useGlobalSslContextParameters) {
this.useGlobalSslContextParameters = useGlobalSslContextParameters;
}
-}
\ No newline at end of file
+}