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.git
The following commit(s) were added to refs/heads/main by this push:
new 1dda2b175d7b CAMEL-25145: camel-milo - apply subscription parameters,
add queueSize
1dda2b175d7b is described below
commit 1dda2b175d7bb5fa19b42e3a573cd036a42a3221
Author: robMate <[email protected]>
AuthorDate: Fri Oct 9 09:04:00 2026 +0200
CAMEL-25145: camel-milo - apply subscription parameters, add queueSize
The OPC UA monitored item parameters configured on a milo-client endpoint
were not applied to the subscription. The consumer now applies them per
endpoint, taking the monitor filter (data change trigger, deadband type and
value) from the endpoint rather than from the shared connection.
A new queueSize option sets the queue size of the monitored items (a queue
size of 1 is requested when it is not set). requestedPublishingInterval is
now part of the cache id of shared connections. The samplingInterval
default is 1000.0, which keeps the sampling interval that has been in
effect since 4.16. The data change filter options changed from UInteger to
Integer, which the 4.23 upgrade guide documents.
Closes #27201
Co-authored-by: schnloth <[email protected]>
Co-authored-by: Guillaume Nodet - AI Bot <[email protected]>
Co-authored-by: Claus Ibsen <[email protected]>
---
.../camel/catalog/components/milo-client.json | 53 ++++----
.../camel/catalog/docs/milo-client-component.adoc | 9 +-
.../milo/client/MiloClientEndpointConfigurer.java | 10 +-
.../milo/client/MiloClientEndpointUriFactory.java | 3 +-
.../camel/component/milo/client/milo-client.json | 53 ++++----
.../src/main/docs/milo-client-component.adoc | 9 +-
.../client/MiloClientCachingConnectionManager.java | 12 +-
.../milo/client/MiloClientConfiguration.java | 4 +-
.../milo/client/MiloClientConnection.java | 11 +-
.../component/milo/client/MiloClientConsumer.java | 5 +-
.../component/milo/client/MiloClientEndpoint.java | 21 ++-
.../milo/client/MonitorFilterConfiguration.java | 14 +-
.../milo/client/internal/SubscriptionManager.java | 31 ++++-
.../camel/component/milo/MonitorItemTest.java | 142 ++++++++++++++++++++-
.../ROOT/pages/camel-4x-upgrade-guide-4_23.adoc | 13 ++
.../dsl/MiloClientEndpointBuilderFactory.java | 132 ++++++++++++++++---
16 files changed, 403 insertions(+), 119 deletions(-)
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/milo-client.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/milo-client.json
index 79fb3e73d9bb..58b851de167e 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/milo-client.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/milo-client.json
@@ -60,7 +60,7 @@
"properties": {
"endpointUri": { "index": 0, "kind": "path", "displayName": "Endpoint
Uri", "group": "common", "label": "", "required": true, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "description": "The OPC UA server
endpoint" },
"clientId": { "index": 1, "kind": "parameter", "displayName": "Client Id",
"group": "common", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "A virtual client id to
force the creation of a new connection instance" },
- "dataChangeFilterDeadbandType": { "index": 2, "kind": "parameter",
"displayName": "Data Change Filter Deadband Type", "group": "common", "label":
"", "required": false, "type": "object", "javaType":
"org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger",
"deprecated": false, "autowired": false, "secret": false, "defaultValue": "0",
"configurationClass":
"org.apache.camel.component.milo.client.MonitorFilterConfiguration",
"configurationField": "monitorFilterConfiguration" [...]
+ "dataChangeFilterDeadbandType": { "index": 2, "kind": "parameter",
"displayName": "Data Change Filter Deadband Type", "group": "common", "label":
"", "required": false, "type": "integer", "javaType": "java.lang.Integer",
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 0,
"configurationClass":
"org.apache.camel.component.milo.client.MonitorFilterConfiguration",
"configurationField": "monitorFilterConfiguration", "description": "Deadband
type for MonitorFilter [...]
"dataChangeFilterDeadbandValue": { "index": 3, "kind": "parameter",
"displayName": "Data Change Filter Deadband Value", "group": "common", "label":
"", "required": false, "type": "number", "javaType": "java.lang.Double",
"deprecated": false, "autowired": false, "secret": false, "defaultValue":
"0.0", "configurationClass":
"org.apache.camel.component.milo.client.MonitorFilterConfiguration",
"configurationField": "monitorFilterConfiguration", "description": "Deadband
value for MonitorF [...]
"dataChangeFilterTrigger": { "index": 4, "kind": "parameter",
"displayName": "Data Change Filter Trigger", "group": "common", "label": "",
"required": false, "type": "enum", "javaType":
"org.eclipse.milo.opcua.stack.core.types.enumerated.DataChangeTrigger", "enum":
[ "Status", "StatusValue", "StatusValueTimestamp" ], "deprecated": false,
"autowired": false, "secret": false, "defaultValue": "StatusValueTimestamp",
"configurationClass": "org.apache.camel.component.milo.client.MonitorFi [...]
"defaultAwaitWrites": { "index": 5, "kind": "parameter", "displayName":
"Default Await Writes", "group": "common", "label": "", "required": false,
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "description": "Default await
setting for writes" },
@@ -70,30 +70,31 @@
"monitorFilterType": { "index": 9, "kind": "parameter", "displayName":
"Monitor Filter Type", "group": "common", "label": "", "required": false,
"type": "enum", "javaType":
"org.apache.camel.component.milo.client.MonitorFilterType", "enum": [
"dataChangeFilter" ], "deprecated": false, "autowired": false, "secret": false,
"configurationClass":
"org.apache.camel.component.milo.client.MonitorFilterConfiguration",
"configurationField": "monitorFilterConfiguration", "description": "Monito [...]
"node": { "index": 10, "kind": "parameter", "displayName": "Node",
"group": "common", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "The node definition (see Node ID)" },
"omitNullValues": { "index": 11, "kind": "parameter", "displayName": "Omit
Null Values", "group": "common", "label": "", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": true, "description": "Omit notifications in
case of null values" },
- "samplingInterval": { "index": 12, "kind": "parameter", "displayName":
"Sampling Interval", "group": "common", "label": "", "required": false, "type":
"number", "javaType": "java.lang.Double", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": "0.0", "description": "The sampling
interval in milliseconds" },
- "bridgeErrorHandler": { "index": 13, "kind": "parameter", "displayName":
"Bridge Error Handler", "group": "consumer (advanced)", "label":
"consumer,advanced", "required": false, "type": "boolean", "javaType":
"boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Allows for bridging the consumer to the
Camel routing Error Handler, which mean any exceptions (if possible) occurred
while the Camel consumer is trying to pickup incoming [...]
- "exceptionHandler": { "index": 14, "kind": "parameter", "displayName":
"Exception Handler", "group": "consumer (advanced)", "label":
"consumer,advanced", "required": false, "type": "object", "javaType":
"org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.",
"deprecated": false, "autowired": false, "secret": false, "description": "To
let the consumer use a custom ExceptionHandler. Notice if the option
bridgeErrorHandler is enabled then this option is not in use. By de [...]
- "exchangePattern": { "index": 15, "kind": "parameter", "displayName":
"Exchange Pattern", "group": "consumer (advanced)", "label":
"consumer,advanced", "required": false, "type": "enum", "javaType":
"org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut" ],
"deprecated": false, "autowired": false, "secret": false, "description": "Sets
the exchange pattern when the consumer creates an exchange." },
- "lazyStartProducer": { "index": 16, "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 [...]
- "allowedSecurityPolicies": { "index": 17, "kind": "parameter",
"displayName": "Allowed Security Policies", "group": "client", "label":
"client", "required": false, "type": "string", "javaType": "java.lang.String",
"deprecated": false, "autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "A set of allowed
security policy URIs. Default is to accept all and use t [...]
- "applicationName": { "index": 18, "kind": "parameter", "displayName":
"Application Name", "group": "client", "label": "client", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": "Apache Camel adapter for
Eclipse Milo", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The application name" },
- "applicationUri": { "index": 19, "kind": "parameter", "displayName":
"Application Uri", "group": "client", "label": "client", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "defaultValue":
"http:\/\/camel.apache.org\/EclipseMilo\/Client", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The application URI" },
- "channelLifetime": { "index": 20, "kind": "parameter", "displayName":
"Channel Lifetime", "group": "client", "label": "client", "required": false,
"type": "integer", "javaType": "java.lang.Long", "deprecated": false,
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "Channel lifetime in
milliseconds" },
- "keyAlias": { "index": 21, "kind": "parameter", "displayName": "Key
Alias", "group": "client", "label": "client", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The name of the key in
the keystore file" },
- "keyPassword": { "index": 22, "kind": "parameter", "displayName": "Key
Password", "group": "client", "label": "client", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The key password" },
- "keyStorePassword": { "index": 23, "kind": "parameter", "displayName":
"Key Store Password", "group": "client", "label": "client", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The keystore password" },
- "keyStoreType": { "index": 24, "kind": "parameter", "displayName": "Key
Store Type", "group": "client", "label": "client", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The key store type" },
- "keyStoreUrl": { "index": 25, "kind": "parameter", "displayName": "Key
Store Url", "group": "client", "label": "client", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The URL where the key
should be loaded from" },
- "maxPendingPublishRequests": { "index": 26, "kind": "parameter",
"displayName": "Max Pending Publish Requests", "group": "client", "label":
"client", "required": false, "type": "integer", "javaType": "java.lang.Long",
"deprecated": false, "autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The maximum number of
pending publish requests" },
- "maxResponseMessageSize": { "index": 27, "kind": "parameter",
"displayName": "Max Response Message Size", "group": "client", "label":
"client", "required": false, "type": "integer", "javaType": "java.lang.Long",
"deprecated": false, "autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The maximum number of
bytes a response message may have" },
- "overrideHost": { "index": 28, "kind": "parameter", "displayName":
"Override Host", "group": "client", "label": "client", "required": false,
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "Override the server
reported endpoint host with the host from the endpoint URI." },
- "overridePort": { "index": 29, "kind": "parameter", "displayName":
"Override Port", "group": "client", "label": "client", "required": false,
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "Override the server
reported endpoint port with the port from the endpoint URI." },
- "productUri": { "index": 30, "kind": "parameter", "displayName": "Product
Uri", "group": "client", "label": "client", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "defaultValue":
"http:\/\/camel.apache.org\/EclipseMilo", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The product URI" },
- "requestedPublishingInterval": { "index": 31, "kind": "parameter",
"displayName": "Requested Publishing Interval", "group": "client", "label":
"client", "required": false, "type": "number", "javaType": "java.lang.Double",
"deprecated": false, "autowired": false, "secret": false, "defaultValue":
"1_000.0", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The requested publishing
interval in m [...]
- "requestTimeout": { "index": 32, "kind": "parameter", "displayName":
"Request Timeout", "group": "client", "label": "client", "required": false,
"type": "integer", "javaType": "java.lang.Long", "deprecated": false,
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "Request timeout in
milliseconds" },
- "sessionName": { "index": 33, "kind": "parameter", "displayName": "Session
Name", "group": "client", "label": "client", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "Session name" },
- "sessionTimeout": { "index": 34, "kind": "parameter", "displayName":
"Session Timeout", "group": "client", "label": "client", "required": false,
"type": "integer", "javaType": "java.lang.Long", "deprecated": false,
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "Session timeout in
milliseconds" },
- "password": { "index": 35, "kind": "parameter", "displayName": "Password",
"group": "security", "label": "security", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The password for
authentication. Use this instead of embedding credentials in th [...]
- "username": { "index": 36, "kind": "parameter", "displayName": "Username",
"group": "security", "label": "security", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The username for
authentication. Use this instead of embedding credentials in the endpoint URI
when t [...]
+ "queueSize": { "index": 12, "kind": "parameter", "displayName": "Queue
Size", "group": "common", "label": "", "required": false, "type": "integer",
"javaType": "java.lang.Integer", "deprecated": false, "autowired": false,
"secret": false, "description": "The queue size used for OPC UA subscriptions.
If not set, a queue size of 1 is requested." },
+ "samplingInterval": { "index": 13, "kind": "parameter", "displayName":
"Sampling Interval", "group": "common", "label": "", "required": false, "type":
"number", "javaType": "java.lang.Double", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": "1000.0", "description": "The sampling
interval in milliseconds" },
+ "bridgeErrorHandler": { "index": 14, "kind": "parameter", "displayName":
"Bridge Error Handler", "group": "consumer (advanced)", "label":
"consumer,advanced", "required": false, "type": "boolean", "javaType":
"boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Allows for bridging the consumer to the
Camel routing Error Handler, which mean any exceptions (if possible) occurred
while the Camel consumer is trying to pickup incoming [...]
+ "exceptionHandler": { "index": 15, "kind": "parameter", "displayName":
"Exception Handler", "group": "consumer (advanced)", "label":
"consumer,advanced", "required": false, "type": "object", "javaType":
"org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.",
"deprecated": false, "autowired": false, "secret": false, "description": "To
let the consumer use a custom ExceptionHandler. Notice if the option
bridgeErrorHandler is enabled then this option is not in use. By de [...]
+ "exchangePattern": { "index": 16, "kind": "parameter", "displayName":
"Exchange Pattern", "group": "consumer (advanced)", "label":
"consumer,advanced", "required": false, "type": "enum", "javaType":
"org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut" ],
"deprecated": false, "autowired": false, "secret": false, "description": "Sets
the exchange pattern when the consumer creates an exchange." },
+ "lazyStartProducer": { "index": 17, "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 [...]
+ "allowedSecurityPolicies": { "index": 18, "kind": "parameter",
"displayName": "Allowed Security Policies", "group": "client", "label":
"client", "required": false, "type": "string", "javaType": "java.lang.String",
"deprecated": false, "autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "A set of allowed
security policy URIs. Default is to accept all and use t [...]
+ "applicationName": { "index": 19, "kind": "parameter", "displayName":
"Application Name", "group": "client", "label": "client", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": "Apache Camel adapter for
Eclipse Milo", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The application name" },
+ "applicationUri": { "index": 20, "kind": "parameter", "displayName":
"Application Uri", "group": "client", "label": "client", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "defaultValue":
"http:\/\/camel.apache.org\/EclipseMilo\/Client", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The application URI" },
+ "channelLifetime": { "index": 21, "kind": "parameter", "displayName":
"Channel Lifetime", "group": "client", "label": "client", "required": false,
"type": "integer", "javaType": "java.lang.Long", "deprecated": false,
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "Channel lifetime in
milliseconds" },
+ "keyAlias": { "index": 22, "kind": "parameter", "displayName": "Key
Alias", "group": "client", "label": "client", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The name of the key in
the keystore file" },
+ "keyPassword": { "index": 23, "kind": "parameter", "displayName": "Key
Password", "group": "client", "label": "client", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The key password" },
+ "keyStorePassword": { "index": 24, "kind": "parameter", "displayName":
"Key Store Password", "group": "client", "label": "client", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The keystore password" },
+ "keyStoreType": { "index": 25, "kind": "parameter", "displayName": "Key
Store Type", "group": "client", "label": "client", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The key store type" },
+ "keyStoreUrl": { "index": 26, "kind": "parameter", "displayName": "Key
Store Url", "group": "client", "label": "client", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The URL where the key
should be loaded from" },
+ "maxPendingPublishRequests": { "index": 27, "kind": "parameter",
"displayName": "Max Pending Publish Requests", "group": "client", "label":
"client", "required": false, "type": "integer", "javaType": "java.lang.Long",
"deprecated": false, "autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The maximum number of
pending publish requests" },
+ "maxResponseMessageSize": { "index": 28, "kind": "parameter",
"displayName": "Max Response Message Size", "group": "client", "label":
"client", "required": false, "type": "integer", "javaType": "java.lang.Long",
"deprecated": false, "autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The maximum number of
bytes a response message may have" },
+ "overrideHost": { "index": 29, "kind": "parameter", "displayName":
"Override Host", "group": "client", "label": "client", "required": false,
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "Override the server
reported endpoint host with the host from the endpoint URI." },
+ "overridePort": { "index": 30, "kind": "parameter", "displayName":
"Override Port", "group": "client", "label": "client", "required": false,
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "Override the server
reported endpoint port with the port from the endpoint URI." },
+ "productUri": { "index": 31, "kind": "parameter", "displayName": "Product
Uri", "group": "client", "label": "client", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "defaultValue":
"http:\/\/camel.apache.org\/EclipseMilo", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The product URI" },
+ "requestedPublishingInterval": { "index": 32, "kind": "parameter",
"displayName": "Requested Publishing Interval", "group": "client", "label":
"client", "required": false, "type": "number", "javaType": "java.lang.Double",
"deprecated": false, "autowired": false, "secret": false, "defaultValue":
"1_000.0", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The requested publishing
interval in m [...]
+ "requestTimeout": { "index": 33, "kind": "parameter", "displayName":
"Request Timeout", "group": "client", "label": "client", "required": false,
"type": "integer", "javaType": "java.lang.Long", "deprecated": false,
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "Request timeout in
milliseconds" },
+ "sessionName": { "index": 34, "kind": "parameter", "displayName": "Session
Name", "group": "client", "label": "client", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "Session name" },
+ "sessionTimeout": { "index": 35, "kind": "parameter", "displayName":
"Session Timeout", "group": "client", "label": "client", "required": false,
"type": "integer", "javaType": "java.lang.Long", "deprecated": false,
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "Session timeout in
milliseconds" },
+ "password": { "index": 36, "kind": "parameter", "displayName": "Password",
"group": "security", "label": "security", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The password for
authentication. Use this instead of embedding credentials in th [...]
+ "username": { "index": 37, "kind": "parameter", "displayName": "Username",
"group": "security", "label": "security", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The username for
authentication. Use this instead of embedding credentials in the endpoint URI
when t [...]
}
}
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/milo-client-component.adoc
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/milo-client-component.adoc
index 90ff4f0cb343..3c5b1aecdb95 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/milo-client-component.adoc
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/milo-client-component.adoc
@@ -65,12 +65,13 @@ When both styles are provided, the explicit
`username`/`password` parameters tak
precedence over credentials embedded in the URI.
All configuration options in the group +client+ are applicable to the shared
client instance. Endpoints
-will share client instances for each endpoint URI. So the first time a request
for that endpoint URI is
-made, the options of the +client+ group are applied. All further instances
will be ignored.
+will share client instances for each endpoint URI plus
`requestedPublishingInterval`.
+So the first time a request for that endpoint URI (plus
`requestedPublishingInterval`) is made, the options of
+the +client+ group are applied. All further instances will be ignored.
If you need alternate options for the same endpoint URI it is possible though
to set the +clientId+ option
-which will by added internally to the endpoint URI in order to select a
different shared connection instance.
-In other words, shared connections located by the combination of endpoint URI
and client id.
+which will be added internally to the endpoint URI in order to select a
different shared connection instance.
+In other words, shared connections located by the combination of endpoint URI,
`requestedPublishingInterval` and client id.
// component options: START
diff --git
a/components/camel-milo/src/generated/java/org/apache/camel/component/milo/client/MiloClientEndpointConfigurer.java
b/components/camel-milo/src/generated/java/org/apache/camel/component/milo/client/MiloClientEndpointConfigurer.java
index 971853e1a8e6..c415e53a4812 100644
---
a/components/camel-milo/src/generated/java/org/apache/camel/component/milo/client/MiloClientEndpointConfigurer.java
+++
b/components/camel-milo/src/generated/java/org/apache/camel/component/milo/client/MiloClientEndpointConfigurer.java
@@ -36,7 +36,7 @@ public class MiloClientEndpointConfigurer extends
PropertyConfigurerSupport impl
case "clientid":
case "clientId":
target.getConfiguration().setClientId(property(camelContext,
java.lang.String.class, value)); return true;
case "datachangefilterdeadbandtype":
- case "dataChangeFilterDeadbandType":
target.getMonitorFilterConfiguration().setDataChangeFilterDeadbandType(property(camelContext,
org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger.class,
value)); return true;
+ case "dataChangeFilterDeadbandType":
target.getMonitorFilterConfiguration().setDataChangeFilterDeadbandType(property(camelContext,
java.lang.Integer.class, value)); return true;
case "datachangefilterdeadbandvalue":
case "dataChangeFilterDeadbandValue":
target.getMonitorFilterConfiguration().setDataChangeFilterDeadbandValue(property(camelContext,
java.lang.Double.class, value)); return true;
case "datachangefiltertrigger":
@@ -80,6 +80,8 @@ public class MiloClientEndpointConfigurer extends
PropertyConfigurerSupport impl
case "password":
target.getConfiguration().setPassword(property(camelContext,
java.lang.String.class, value)); return true;
case "producturi":
case "productUri":
target.getConfiguration().setProductUri(property(camelContext,
java.lang.String.class, value)); return true;
+ case "queuesize":
+ case "queueSize": target.setQueueSize(property(camelContext,
java.lang.Integer.class, value)); return true;
case "requesttimeout":
case "requestTimeout":
target.getConfiguration().setRequestTimeout(property(camelContext,
java.lang.Long.class, value)); return true;
case "requestedpublishinginterval":
@@ -111,7 +113,7 @@ public class MiloClientEndpointConfigurer extends
PropertyConfigurerSupport impl
case "clientid":
case "clientId": return java.lang.String.class;
case "datachangefilterdeadbandtype":
- case "dataChangeFilterDeadbandType": return
org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger.class;
+ case "dataChangeFilterDeadbandType": return java.lang.Integer.class;
case "datachangefilterdeadbandvalue":
case "dataChangeFilterDeadbandValue": return java.lang.Double.class;
case "datachangefiltertrigger":
@@ -155,6 +157,8 @@ public class MiloClientEndpointConfigurer extends
PropertyConfigurerSupport impl
case "password": return java.lang.String.class;
case "producturi":
case "productUri": return java.lang.String.class;
+ case "queuesize":
+ case "queueSize": return java.lang.Integer.class;
case "requesttimeout":
case "requestTimeout": return java.lang.Long.class;
case "requestedpublishinginterval":
@@ -231,6 +235,8 @@ public class MiloClientEndpointConfigurer extends
PropertyConfigurerSupport impl
case "password": return target.getConfiguration().getPassword();
case "producturi":
case "productUri": return target.getConfiguration().getProductUri();
+ case "queuesize":
+ case "queueSize": return target.getQueueSize();
case "requesttimeout":
case "requestTimeout": return
target.getConfiguration().getRequestTimeout();
case "requestedpublishinginterval":
diff --git
a/components/camel-milo/src/generated/java/org/apache/camel/component/milo/client/MiloClientEndpointUriFactory.java
b/components/camel-milo/src/generated/java/org/apache/camel/component/milo/client/MiloClientEndpointUriFactory.java
index 0f31567d1193..15e5b54e0ab5 100644
---
a/components/camel-milo/src/generated/java/org/apache/camel/component/milo/client/MiloClientEndpointUriFactory.java
+++
b/components/camel-milo/src/generated/java/org/apache/camel/component/milo/client/MiloClientEndpointUriFactory.java
@@ -24,7 +24,7 @@ public class MiloClientEndpointUriFactory extends
org.apache.camel.support.compo
private static final Set<String> ENDPOINT_IDENTITY_PROPERTY_NAMES;
private static final Map<String, String> MULTI_VALUE_PREFIXES;
static {
- Set<String> props = new HashSet<>(37);
+ Set<String> props = new HashSet<>(38);
props.add("allowedSecurityPolicies");
props.add("applicationName");
props.add("applicationUri");
@@ -56,6 +56,7 @@ public class MiloClientEndpointUriFactory extends
org.apache.camel.support.compo
props.add("overridePort");
props.add("password");
props.add("productUri");
+ props.add("queueSize");
props.add("requestTimeout");
props.add("requestedPublishingInterval");
props.add("samplingInterval");
diff --git
a/components/camel-milo/src/generated/resources/META-INF/org/apache/camel/component/milo/client/milo-client.json
b/components/camel-milo/src/generated/resources/META-INF/org/apache/camel/component/milo/client/milo-client.json
index 79fb3e73d9bb..58b851de167e 100644
---
a/components/camel-milo/src/generated/resources/META-INF/org/apache/camel/component/milo/client/milo-client.json
+++
b/components/camel-milo/src/generated/resources/META-INF/org/apache/camel/component/milo/client/milo-client.json
@@ -60,7 +60,7 @@
"properties": {
"endpointUri": { "index": 0, "kind": "path", "displayName": "Endpoint
Uri", "group": "common", "label": "", "required": true, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "description": "The OPC UA server
endpoint" },
"clientId": { "index": 1, "kind": "parameter", "displayName": "Client Id",
"group": "common", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "A virtual client id to
force the creation of a new connection instance" },
- "dataChangeFilterDeadbandType": { "index": 2, "kind": "parameter",
"displayName": "Data Change Filter Deadband Type", "group": "common", "label":
"", "required": false, "type": "object", "javaType":
"org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger",
"deprecated": false, "autowired": false, "secret": false, "defaultValue": "0",
"configurationClass":
"org.apache.camel.component.milo.client.MonitorFilterConfiguration",
"configurationField": "monitorFilterConfiguration" [...]
+ "dataChangeFilterDeadbandType": { "index": 2, "kind": "parameter",
"displayName": "Data Change Filter Deadband Type", "group": "common", "label":
"", "required": false, "type": "integer", "javaType": "java.lang.Integer",
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 0,
"configurationClass":
"org.apache.camel.component.milo.client.MonitorFilterConfiguration",
"configurationField": "monitorFilterConfiguration", "description": "Deadband
type for MonitorFilter [...]
"dataChangeFilterDeadbandValue": { "index": 3, "kind": "parameter",
"displayName": "Data Change Filter Deadband Value", "group": "common", "label":
"", "required": false, "type": "number", "javaType": "java.lang.Double",
"deprecated": false, "autowired": false, "secret": false, "defaultValue":
"0.0", "configurationClass":
"org.apache.camel.component.milo.client.MonitorFilterConfiguration",
"configurationField": "monitorFilterConfiguration", "description": "Deadband
value for MonitorF [...]
"dataChangeFilterTrigger": { "index": 4, "kind": "parameter",
"displayName": "Data Change Filter Trigger", "group": "common", "label": "",
"required": false, "type": "enum", "javaType":
"org.eclipse.milo.opcua.stack.core.types.enumerated.DataChangeTrigger", "enum":
[ "Status", "StatusValue", "StatusValueTimestamp" ], "deprecated": false,
"autowired": false, "secret": false, "defaultValue": "StatusValueTimestamp",
"configurationClass": "org.apache.camel.component.milo.client.MonitorFi [...]
"defaultAwaitWrites": { "index": 5, "kind": "parameter", "displayName":
"Default Await Writes", "group": "common", "label": "", "required": false,
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "description": "Default await
setting for writes" },
@@ -70,30 +70,31 @@
"monitorFilterType": { "index": 9, "kind": "parameter", "displayName":
"Monitor Filter Type", "group": "common", "label": "", "required": false,
"type": "enum", "javaType":
"org.apache.camel.component.milo.client.MonitorFilterType", "enum": [
"dataChangeFilter" ], "deprecated": false, "autowired": false, "secret": false,
"configurationClass":
"org.apache.camel.component.milo.client.MonitorFilterConfiguration",
"configurationField": "monitorFilterConfiguration", "description": "Monito [...]
"node": { "index": 10, "kind": "parameter", "displayName": "Node",
"group": "common", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "The node definition (see Node ID)" },
"omitNullValues": { "index": 11, "kind": "parameter", "displayName": "Omit
Null Values", "group": "common", "label": "", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": true, "description": "Omit notifications in
case of null values" },
- "samplingInterval": { "index": 12, "kind": "parameter", "displayName":
"Sampling Interval", "group": "common", "label": "", "required": false, "type":
"number", "javaType": "java.lang.Double", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": "0.0", "description": "The sampling
interval in milliseconds" },
- "bridgeErrorHandler": { "index": 13, "kind": "parameter", "displayName":
"Bridge Error Handler", "group": "consumer (advanced)", "label":
"consumer,advanced", "required": false, "type": "boolean", "javaType":
"boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Allows for bridging the consumer to the
Camel routing Error Handler, which mean any exceptions (if possible) occurred
while the Camel consumer is trying to pickup incoming [...]
- "exceptionHandler": { "index": 14, "kind": "parameter", "displayName":
"Exception Handler", "group": "consumer (advanced)", "label":
"consumer,advanced", "required": false, "type": "object", "javaType":
"org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.",
"deprecated": false, "autowired": false, "secret": false, "description": "To
let the consumer use a custom ExceptionHandler. Notice if the option
bridgeErrorHandler is enabled then this option is not in use. By de [...]
- "exchangePattern": { "index": 15, "kind": "parameter", "displayName":
"Exchange Pattern", "group": "consumer (advanced)", "label":
"consumer,advanced", "required": false, "type": "enum", "javaType":
"org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut" ],
"deprecated": false, "autowired": false, "secret": false, "description": "Sets
the exchange pattern when the consumer creates an exchange." },
- "lazyStartProducer": { "index": 16, "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 [...]
- "allowedSecurityPolicies": { "index": 17, "kind": "parameter",
"displayName": "Allowed Security Policies", "group": "client", "label":
"client", "required": false, "type": "string", "javaType": "java.lang.String",
"deprecated": false, "autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "A set of allowed
security policy URIs. Default is to accept all and use t [...]
- "applicationName": { "index": 18, "kind": "parameter", "displayName":
"Application Name", "group": "client", "label": "client", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": "Apache Camel adapter for
Eclipse Milo", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The application name" },
- "applicationUri": { "index": 19, "kind": "parameter", "displayName":
"Application Uri", "group": "client", "label": "client", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "defaultValue":
"http:\/\/camel.apache.org\/EclipseMilo\/Client", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The application URI" },
- "channelLifetime": { "index": 20, "kind": "parameter", "displayName":
"Channel Lifetime", "group": "client", "label": "client", "required": false,
"type": "integer", "javaType": "java.lang.Long", "deprecated": false,
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "Channel lifetime in
milliseconds" },
- "keyAlias": { "index": 21, "kind": "parameter", "displayName": "Key
Alias", "group": "client", "label": "client", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The name of the key in
the keystore file" },
- "keyPassword": { "index": 22, "kind": "parameter", "displayName": "Key
Password", "group": "client", "label": "client", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The key password" },
- "keyStorePassword": { "index": 23, "kind": "parameter", "displayName":
"Key Store Password", "group": "client", "label": "client", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The keystore password" },
- "keyStoreType": { "index": 24, "kind": "parameter", "displayName": "Key
Store Type", "group": "client", "label": "client", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The key store type" },
- "keyStoreUrl": { "index": 25, "kind": "parameter", "displayName": "Key
Store Url", "group": "client", "label": "client", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The URL where the key
should be loaded from" },
- "maxPendingPublishRequests": { "index": 26, "kind": "parameter",
"displayName": "Max Pending Publish Requests", "group": "client", "label":
"client", "required": false, "type": "integer", "javaType": "java.lang.Long",
"deprecated": false, "autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The maximum number of
pending publish requests" },
- "maxResponseMessageSize": { "index": 27, "kind": "parameter",
"displayName": "Max Response Message Size", "group": "client", "label":
"client", "required": false, "type": "integer", "javaType": "java.lang.Long",
"deprecated": false, "autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The maximum number of
bytes a response message may have" },
- "overrideHost": { "index": 28, "kind": "parameter", "displayName":
"Override Host", "group": "client", "label": "client", "required": false,
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "Override the server
reported endpoint host with the host from the endpoint URI." },
- "overridePort": { "index": 29, "kind": "parameter", "displayName":
"Override Port", "group": "client", "label": "client", "required": false,
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "Override the server
reported endpoint port with the port from the endpoint URI." },
- "productUri": { "index": 30, "kind": "parameter", "displayName": "Product
Uri", "group": "client", "label": "client", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "defaultValue":
"http:\/\/camel.apache.org\/EclipseMilo", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The product URI" },
- "requestedPublishingInterval": { "index": 31, "kind": "parameter",
"displayName": "Requested Publishing Interval", "group": "client", "label":
"client", "required": false, "type": "number", "javaType": "java.lang.Double",
"deprecated": false, "autowired": false, "secret": false, "defaultValue":
"1_000.0", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The requested publishing
interval in m [...]
- "requestTimeout": { "index": 32, "kind": "parameter", "displayName":
"Request Timeout", "group": "client", "label": "client", "required": false,
"type": "integer", "javaType": "java.lang.Long", "deprecated": false,
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "Request timeout in
milliseconds" },
- "sessionName": { "index": 33, "kind": "parameter", "displayName": "Session
Name", "group": "client", "label": "client", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "Session name" },
- "sessionTimeout": { "index": 34, "kind": "parameter", "displayName":
"Session Timeout", "group": "client", "label": "client", "required": false,
"type": "integer", "javaType": "java.lang.Long", "deprecated": false,
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "Session timeout in
milliseconds" },
- "password": { "index": 35, "kind": "parameter", "displayName": "Password",
"group": "security", "label": "security", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The password for
authentication. Use this instead of embedding credentials in th [...]
- "username": { "index": 36, "kind": "parameter", "displayName": "Username",
"group": "security", "label": "security", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The username for
authentication. Use this instead of embedding credentials in the endpoint URI
when t [...]
+ "queueSize": { "index": 12, "kind": "parameter", "displayName": "Queue
Size", "group": "common", "label": "", "required": false, "type": "integer",
"javaType": "java.lang.Integer", "deprecated": false, "autowired": false,
"secret": false, "description": "The queue size used for OPC UA subscriptions.
If not set, a queue size of 1 is requested." },
+ "samplingInterval": { "index": 13, "kind": "parameter", "displayName":
"Sampling Interval", "group": "common", "label": "", "required": false, "type":
"number", "javaType": "java.lang.Double", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": "1000.0", "description": "The sampling
interval in milliseconds" },
+ "bridgeErrorHandler": { "index": 14, "kind": "parameter", "displayName":
"Bridge Error Handler", "group": "consumer (advanced)", "label":
"consumer,advanced", "required": false, "type": "boolean", "javaType":
"boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Allows for bridging the consumer to the
Camel routing Error Handler, which mean any exceptions (if possible) occurred
while the Camel consumer is trying to pickup incoming [...]
+ "exceptionHandler": { "index": 15, "kind": "parameter", "displayName":
"Exception Handler", "group": "consumer (advanced)", "label":
"consumer,advanced", "required": false, "type": "object", "javaType":
"org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.",
"deprecated": false, "autowired": false, "secret": false, "description": "To
let the consumer use a custom ExceptionHandler. Notice if the option
bridgeErrorHandler is enabled then this option is not in use. By de [...]
+ "exchangePattern": { "index": 16, "kind": "parameter", "displayName":
"Exchange Pattern", "group": "consumer (advanced)", "label":
"consumer,advanced", "required": false, "type": "enum", "javaType":
"org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut" ],
"deprecated": false, "autowired": false, "secret": false, "description": "Sets
the exchange pattern when the consumer creates an exchange." },
+ "lazyStartProducer": { "index": 17, "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 [...]
+ "allowedSecurityPolicies": { "index": 18, "kind": "parameter",
"displayName": "Allowed Security Policies", "group": "client", "label":
"client", "required": false, "type": "string", "javaType": "java.lang.String",
"deprecated": false, "autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "A set of allowed
security policy URIs. Default is to accept all and use t [...]
+ "applicationName": { "index": 19, "kind": "parameter", "displayName":
"Application Name", "group": "client", "label": "client", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": "Apache Camel adapter for
Eclipse Milo", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The application name" },
+ "applicationUri": { "index": 20, "kind": "parameter", "displayName":
"Application Uri", "group": "client", "label": "client", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "defaultValue":
"http:\/\/camel.apache.org\/EclipseMilo\/Client", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The application URI" },
+ "channelLifetime": { "index": 21, "kind": "parameter", "displayName":
"Channel Lifetime", "group": "client", "label": "client", "required": false,
"type": "integer", "javaType": "java.lang.Long", "deprecated": false,
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "Channel lifetime in
milliseconds" },
+ "keyAlias": { "index": 22, "kind": "parameter", "displayName": "Key
Alias", "group": "client", "label": "client", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The name of the key in
the keystore file" },
+ "keyPassword": { "index": 23, "kind": "parameter", "displayName": "Key
Password", "group": "client", "label": "client", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The key password" },
+ "keyStorePassword": { "index": 24, "kind": "parameter", "displayName":
"Key Store Password", "group": "client", "label": "client", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The keystore password" },
+ "keyStoreType": { "index": 25, "kind": "parameter", "displayName": "Key
Store Type", "group": "client", "label": "client", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The key store type" },
+ "keyStoreUrl": { "index": 26, "kind": "parameter", "displayName": "Key
Store Url", "group": "client", "label": "client", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The URL where the key
should be loaded from" },
+ "maxPendingPublishRequests": { "index": 27, "kind": "parameter",
"displayName": "Max Pending Publish Requests", "group": "client", "label":
"client", "required": false, "type": "integer", "javaType": "java.lang.Long",
"deprecated": false, "autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The maximum number of
pending publish requests" },
+ "maxResponseMessageSize": { "index": 28, "kind": "parameter",
"displayName": "Max Response Message Size", "group": "client", "label":
"client", "required": false, "type": "integer", "javaType": "java.lang.Long",
"deprecated": false, "autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The maximum number of
bytes a response message may have" },
+ "overrideHost": { "index": 29, "kind": "parameter", "displayName":
"Override Host", "group": "client", "label": "client", "required": false,
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "Override the server
reported endpoint host with the host from the endpoint URI." },
+ "overridePort": { "index": 30, "kind": "parameter", "displayName":
"Override Port", "group": "client", "label": "client", "required": false,
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "Override the server
reported endpoint port with the port from the endpoint URI." },
+ "productUri": { "index": 31, "kind": "parameter", "displayName": "Product
Uri", "group": "client", "label": "client", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "defaultValue":
"http:\/\/camel.apache.org\/EclipseMilo", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The product URI" },
+ "requestedPublishingInterval": { "index": 32, "kind": "parameter",
"displayName": "Requested Publishing Interval", "group": "client", "label":
"client", "required": false, "type": "number", "javaType": "java.lang.Double",
"deprecated": false, "autowired": false, "secret": false, "defaultValue":
"1_000.0", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The requested publishing
interval in m [...]
+ "requestTimeout": { "index": 33, "kind": "parameter", "displayName":
"Request Timeout", "group": "client", "label": "client", "required": false,
"type": "integer", "javaType": "java.lang.Long", "deprecated": false,
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "Request timeout in
milliseconds" },
+ "sessionName": { "index": 34, "kind": "parameter", "displayName": "Session
Name", "group": "client", "label": "client", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "Session name" },
+ "sessionTimeout": { "index": 35, "kind": "parameter", "displayName":
"Session Timeout", "group": "client", "label": "client", "required": false,
"type": "integer", "javaType": "java.lang.Long", "deprecated": false,
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "Session timeout in
milliseconds" },
+ "password": { "index": 36, "kind": "parameter", "displayName": "Password",
"group": "security", "label": "security", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The password for
authentication. Use this instead of embedding credentials in th [...]
+ "username": { "index": 37, "kind": "parameter", "displayName": "Username",
"group": "security", "label": "security", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "configurationClass":
"org.apache.camel.component.milo.client.MiloClientConfiguration",
"configurationField": "configuration", "description": "The username for
authentication. Use this instead of embedding credentials in the endpoint URI
when t [...]
}
}
diff --git a/components/camel-milo/src/main/docs/milo-client-component.adoc
b/components/camel-milo/src/main/docs/milo-client-component.adoc
index 90ff4f0cb343..3c5b1aecdb95 100644
--- a/components/camel-milo/src/main/docs/milo-client-component.adoc
+++ b/components/camel-milo/src/main/docs/milo-client-component.adoc
@@ -65,12 +65,13 @@ When both styles are provided, the explicit
`username`/`password` parameters tak
precedence over credentials embedded in the URI.
All configuration options in the group +client+ are applicable to the shared
client instance. Endpoints
-will share client instances for each endpoint URI. So the first time a request
for that endpoint URI is
-made, the options of the +client+ group are applied. All further instances
will be ignored.
+will share client instances for each endpoint URI plus
`requestedPublishingInterval`.
+So the first time a request for that endpoint URI (plus
`requestedPublishingInterval`) is made, the options of
+the +client+ group are applied. All further instances will be ignored.
If you need alternate options for the same endpoint URI it is possible though
to set the +clientId+ option
-which will by added internally to the endpoint URI in order to select a
different shared connection instance.
-In other words, shared connections located by the combination of endpoint URI
and client id.
+which will be added internally to the endpoint URI in order to select a
different shared connection instance.
+In other words, shared connections located by the combination of endpoint URI,
`requestedPublishingInterval` and client id.
// component options: START
diff --git
a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientCachingConnectionManager.java
b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientCachingConnectionManager.java
index 2d8ad23434e8..51e98d63324b 100644
---
a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientCachingConnectionManager.java
+++
b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientCachingConnectionManager.java
@@ -61,7 +61,7 @@ public class MiloClientCachingConnectionManager implements
MiloClientConnectionM
try {
final String identifier = configuration.toCacheId();
final ManagedConnection managedConnection
- = cache.computeIfAbsent(identifier, k ->
managedConnection(configuration, monitorFilterConfiguration));
+ = cache.computeIfAbsent(identifier, k ->
managedConnection(configuration));
managedConnection.increment();
return managedConnection.connection;
} finally {
@@ -94,14 +94,12 @@ public class MiloClientCachingConnectionManager implements
MiloClientConnectionM
}
private ManagedConnection managedConnection(
- MiloClientConfiguration configuration,
- MonitorFilterConfiguration monitorFilterConfiguration) {
- return new ManagedConnection(miloClientConnection(configuration,
monitorFilterConfiguration));
+ MiloClientConfiguration configuration) {
+ return new ManagedConnection(miloClientConnection(configuration));
}
private MiloClientConnection miloClientConnection(
- MiloClientConfiguration configuration,
- MonitorFilterConfiguration monitorFilterConfiguration) {
- return new MiloClientConnection(configuration,
monitorFilterConfiguration);
+ MiloClientConfiguration configuration) {
+ return new MiloClientConnection(configuration);
}
}
diff --git
a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConfiguration.java
b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConfiguration.java
index 6859b9fd896a..93f292aaef79 100644
---
a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConfiguration.java
+++
b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConfiguration.java
@@ -465,9 +465,9 @@ public class MiloClientConfiguration implements Cloneable {
public String toCacheId() {
if (this.clientId != null && !this.clientId.isEmpty()) {
- return this.endpointUri + "|" + this.clientId;
+ return this.endpointUri + "|" + this.clientId + "|" +
this.requestedPublishingInterval;
} else {
- return this.endpointUri;
+ return this.endpointUri + "|" + this.requestedPublishingInterval;
}
}
diff --git
a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConnection.java
b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConnection.java
index 146158217690..b8222164a8f6 100644
---
a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConnection.java
+++
b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConnection.java
@@ -44,15 +44,12 @@ public class MiloClientConnection implements AutoCloseable {
private final MiloClientConfiguration configuration;
private SubscriptionManager manager;
private volatile boolean initialized;
- private MonitorFilterConfiguration monitorFilterConfiguration;
- public MiloClientConnection(final MiloClientConfiguration configuration,
- final MonitorFilterConfiguration
monitorFilterConfiguration) {
+ public MiloClientConnection(final MiloClientConfiguration configuration) {
requireNonNull(configuration);
// make a copy since the configuration is mutable
this.configuration = configuration.clone();
- this.monitorFilterConfiguration = monitorFilterConfiguration;
}
public MiloClientConfiguration getConfiguration() {
@@ -118,7 +115,8 @@ public class MiloClientConnection implements AutoCloseable {
}
public MonitorHandle monitorValue(
- final ExpandedNodeId nodeId, Double samplingInterval, final
Consumer<DataValue> valueConsumer) {
+ final ExpandedNodeId nodeId, Double samplingInterval, Integer
queueSize,
+ MonitorFilterConfiguration monitorFilterConfiguration,
Consumer<DataValue> valueConsumer) {
requireNonNull(configuration);
requireNonNull(valueConsumer);
@@ -126,7 +124,8 @@ public class MiloClientConnection implements AutoCloseable {
checkInit();
final UInteger handle
- = this.manager.registerItem(nodeId, samplingInterval,
valueConsumer, this.monitorFilterConfiguration);
+ = this.manager.registerItem(nodeId, samplingInterval,
queueSize, valueConsumer,
+ monitorFilterConfiguration);
return () -> MiloClientConnection.this.manager.unregisterItem(handle);
}
diff --git
a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConsumer.java
b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConsumer.java
index c71d87fd30dd..5f66a3a823fa 100644
---
a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConsumer.java
+++
b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConsumer.java
@@ -35,12 +35,14 @@ public class MiloClientConsumer extends DefaultConsumer {
private MonitorHandle handle;
private ExpandedNodeId node;
private Double samplingInterval;
+ private Integer queueSize;
private boolean omitNullValues;
public MiloClientConsumer(final MiloClientEndpoint endpoint, final
Processor processor) {
super(endpoint, processor);
this.node = endpoint.getNodeId();
this.samplingInterval = endpoint.getSamplingInterval();
+ this.queueSize = endpoint.getQueueSize();
this.omitNullValues = endpoint.isOmitNullValues();
}
@@ -53,7 +55,8 @@ public class MiloClientConsumer extends DefaultConsumer {
protected void doStart() throws Exception {
super.doStart();
this.connection = getEndpoint().createConnection();
- this.handle = this.connection.monitorValue(this.node,
this.samplingInterval, this::handleValueUpdate);
+ this.handle = this.connection.monitorValue(this.node,
this.samplingInterval, this.queueSize,
+ getEndpoint().getMonitorFilterConfiguration(),
this::handleValueUpdate);
}
@Override
diff --git
a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientEndpoint.java
b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientEndpoint.java
index ae796c746d6c..50e32811074a 100644
---
a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientEndpoint.java
+++
b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientEndpoint.java
@@ -63,8 +63,14 @@ public class MiloClientEndpoint extends DefaultEndpoint {
/**
* The sampling interval in milliseconds
*/
- @UriParam(defaultValue = "0.0")
- private Double samplingInterval = 0.0;
+ @UriParam(defaultValue = "1000.0")
+ private Double samplingInterval = 1000.0;
+
+ /**
+ * The queue size used for OPC UA subscriptions. If not set, a queue size
of 1 is requested.
+ */
+ @UriParam
+ private Integer queueSize;
/**
* The client configuration
@@ -180,6 +186,17 @@ public class MiloClientEndpoint extends DefaultEndpoint {
this.samplingInterval = samplingInterval;
}
+ public Integer getQueueSize() {
+ return this.queueSize;
+ }
+
+ public void setQueueSize(final Integer queueSize) {
+ if (queueSize != null && queueSize < 0) {
+ throw new IllegalArgumentException("queueSize must be >= 0, got: "
+ queueSize);
+ }
+ this.queueSize = queueSize;
+ }
+
public boolean isDefaultAwaitWrites() {
return this.defaultAwaitWrites;
}
diff --git
a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MonitorFilterConfiguration.java
b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MonitorFilterConfiguration.java
index 66feb1d33dbe..d9408506f517 100644
---
a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MonitorFilterConfiguration.java
+++
b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MonitorFilterConfiguration.java
@@ -32,7 +32,7 @@ public class MonitorFilterConfiguration implements Cloneable {
private MonitorFilterType monitorFilterType;
@UriParam(defaultValue = "0", description = "Deadband type for
MonitorFilterType DataChangeFilter.")
- private UInteger dataChangeFilterDeadbandType = UInteger.valueOf(0);
+ private Integer dataChangeFilterDeadbandType = Integer.valueOf(0);
@UriParam(defaultValue = "0.0", description = "Deadband value for
MonitorFilterType DataChangeFilter.")
private Double dataChangeFilterDeadbandValue = 0.0;
@@ -48,11 +48,14 @@ public class MonitorFilterConfiguration implements
Cloneable {
this.monitorFilterType = monitorFilterType;
}
- public UInteger getDataChangeFilterDeadbandType() {
+ public Integer getDataChangeFilterDeadbandType() {
return dataChangeFilterDeadbandType;
}
- public void setDataChangeFilterDeadbandType(UInteger
dataChangeFilterDeadbandType) {
+ public void setDataChangeFilterDeadbandType(Integer
dataChangeFilterDeadbandType) {
+ if (dataChangeFilterDeadbandType == null) {
+ throw new IllegalArgumentException("dataChangeFilterDeadbandType
must not be null");
+ }
this.dataChangeFilterDeadbandType = dataChangeFilterDeadbandType;
}
@@ -76,12 +79,15 @@ public class MonitorFilterConfiguration implements
Cloneable {
if (Objects.isNull(this.monitorFilterType)) {
throw new IllegalStateException("No filter type configured.");
}
+ if (this.dataChangeFilterDeadbandType == null) {
+ throw new IllegalStateException("dataChangeFilterDeadbandType must
not be null");
+ }
switch (monitorFilterType) {
default:
return new DataChangeFilter(
this.getDataChangeFilterTrigger(),
- this.getDataChangeFilterDeadbandType(),
+
UInteger.valueOf(this.getDataChangeFilterDeadbandType()),
this.getDataChangeFilterDeadbandValue());
}
}
diff --git
a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/internal/SubscriptionManager.java
b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/internal/SubscriptionManager.java
index e0063b00b0a1..65bd86614470 100644
---
a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/internal/SubscriptionManager.java
+++
b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/internal/SubscriptionManager.java
@@ -60,7 +60,6 @@ import org.eclipse.milo.opcua.stack.core.UaException;
import org.eclipse.milo.opcua.stack.core.types.builtin.ByteString;
import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue;
import org.eclipse.milo.opcua.stack.core.types.builtin.ExpandedNodeId;
-import org.eclipse.milo.opcua.stack.core.types.builtin.ExtensionObject;
import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
import org.eclipse.milo.opcua.stack.core.types.builtin.QualifiedName;
import org.eclipse.milo.opcua.stack.core.types.builtin.StatusCode;
@@ -123,11 +122,14 @@ public class SubscriptionManager {
private final Consumer<DataValue> valueConsumer;
private MonitorFilterConfiguration monitorFilterConfiguration;
+ private final Integer queueSize;
- Subscription(ExpandedNodeId nodeId, final Double samplingInterval,
final Consumer<DataValue> valueConsumer,
+ Subscription(ExpandedNodeId nodeId, final Double samplingInterval,
Integer queueSize,
+ final Consumer<DataValue> valueConsumer,
final MonitorFilterConfiguration
monitorFilterConfiguration) {
this.nodeId = nodeId;
this.samplingInterval = samplingInterval;
+ this.queueSize = queueSize;
this.valueConsumer = valueConsumer;
this.monitorFilterConfiguration = monitorFilterConfiguration;
}
@@ -140,17 +142,21 @@ public class SubscriptionManager {
return this.samplingInterval;
}
+ public Integer getQueueSize() {
+ return this.queueSize;
+ }
+
public Consumer<DataValue> getValueConsumer() {
return this.valueConsumer;
}
- public ExtensionObject createMonitoringFilter(OpcUaClient client) {
+ public MonitoringFilter createMonitoringFilter() {
if (Objects.isNull(this.monitorFilterConfiguration)
||
Objects.isNull(this.monitorFilterConfiguration.getMonitorFilterType())) {
return null;
}
final MonitoringFilter monitorFilter =
this.monitorFilterConfiguration.createMonitoringFilter();
- return ExtensionObject.encode(client.getStaticEncodingContext(),
monitorFilter);
+ return monitorFilter;
}
}
@@ -191,6 +197,16 @@ public class SubscriptionManager {
} else {
final ReadValueId itemId = new ReadValueId(node,
AttributeId.Value.uid(), null, QualifiedName.NULL_VALUE);
final OpcUaMonitoredItem item = new
OpcUaMonitoredItem(itemId, MonitoringMode.Reporting);
+ if (null != s.getSamplingInterval()) {
+ item.setSamplingInterval(s.getSamplingInterval());
+ }
+ if (null != s.getQueueSize()) {
+ item.setQueueSize(UInteger.valueOf(s.getQueueSize()));
+ }
+ MonitoringFilter filter = s.createMonitoringFilter();
+ if (filter != null) {
+ item.setFilter(filter);
+ }
items.add(item);
// Keep track of which subscription this item belongs to
itemToClientHandle.put(item, entry.getKey());
@@ -768,6 +784,7 @@ public class SubscriptionManager {
// Create subscription synchronously - the create() method blocks
until complete
OpcUaSubscription subscription = new OpcUaSubscription(client);
+
subscription.setPublishingInterval(this.configuration.getRequestedPublishingInterval());
subscription.setSubscriptionListener(new
SubscriptionListenerImpl());
subscription.create();
@@ -939,11 +956,13 @@ public class SubscriptionManager {
}
public UInteger registerItem(
- final ExpandedNodeId nodeId, final Double samplingInterval, final
Consumer<DataValue> valueConsumer,
+ final ExpandedNodeId nodeId, final Double samplingInterval,
Integer queueSize,
+ final Consumer<DataValue> valueConsumer,
final MonitorFilterConfiguration monitorFilterConfiguration) {
final UInteger clientHandle =
Unsigned.uint(this.clientHandleCounter.incrementAndGet());
- final Subscription subscription = new Subscription(nodeId,
samplingInterval, valueConsumer, monitorFilterConfiguration);
+ final Subscription subscription
+ = new Subscription(nodeId, samplingInterval, queueSize,
valueConsumer, monitorFilterConfiguration);
lock.lock();
try {
diff --git
a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemTest.java
b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemTest.java
index 5b85288a789a..07509dea2348 100644
---
a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemTest.java
+++
b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemTest.java
@@ -16,15 +16,18 @@
*/
package org.apache.camel.component.milo;
+import java.util.List;
import java.util.concurrent.TimeUnit;
import org.apache.camel.EndpointInject;
+import org.apache.camel.Exchange;
import org.apache.camel.Produce;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.RoutesBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.milo.server.MiloServerComponent;
import org.apache.camel.component.mock.MockEndpoint;
+import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInfo;
@@ -32,6 +35,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.awaitility.Awaitility.await;
+import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* Testing the monitor functionality for item
@@ -45,15 +49,55 @@ public class MonitorItemTest extends AbstractMiloServerTest
{
private static final String MILO_CLIENT_ITEM_C1_1 =
"milo-client:opc.tcp://foo:bar@localhost:@@port@@?node="
+
NodeIds.nodeValue(MiloServerComponent.DEFAULT_NAMESPACE_URI,
"myitem1")
+ +
"&monitorFilterType=dataChangeFilter&dataChangeFilterTrigger=StatusValue&dataChangeFilterDeadbandType=0"
+ +
"&requestedPublishingInterval=2000&samplingInterval=100&queueSize=4"
+ +
"&allowedSecurityPolicies=None&overrideHost=true";
+
+ // second client endpoint with modified dataChangeFilterTrigger to verify
that they are independent on same client
+ private static final String MILO_CLIENT_ITEM_C1_2 =
"milo-client:opc.tcp://foo:bar@localhost:@@port@@?node="
+ +
NodeIds.nodeValue(MiloServerComponent.DEFAULT_NAMESPACE_URI,
+ "myitem1")
+ +
"&monitorFilterType=dataChangeFilter&dataChangeFilterTrigger=StatusValueTimestamp&dataChangeFilterDeadbandType=0"
+ +
"&requestedPublishingInterval=2000&samplingInterval=100&queueSize=4"
+ +
"&allowedSecurityPolicies=None&overrideHost=true";
+
+ // third client endpoint to check for changed default samplingInterval,
sharing client for MILO_CLIENT_ITEM_C1_1.
+ private static final String MILO_CLIENT_ITEM_C1_3 =
"milo-client:opc.tcp://foo:bar@localhost:@@port@@?node="
+ +
NodeIds.nodeValue(MiloServerComponent.DEFAULT_NAMESPACE_URI,
+ "myitem1")
+ +
"&requestedPublishingInterval=2000&queueSize=4"
+ +
"&allowedSecurityPolicies=None&overrideHost=true";
+
+ // another client endpoint to check for independent
requestedPublishingInterval,
+ // will create a second client because requestedPublishingInterval is part
of toCacheId.
+ private static final String MILO_CLIENT_ITEM_C2_1 =
"milo-client:opc.tcp://foo:bar@localhost:@@port@@?node="
+ +
NodeIds.nodeValue(MiloServerComponent.DEFAULT_NAMESPACE_URI,
+ "myitem1")
+ +
"&requestedPublishingInterval=1000&samplingInterval=100&queueSize=3"
+
"&allowedSecurityPolicies=None&overrideHost=true";
private static final String MOCK_TEST_1 = "mock:test1";
+ private static final String MOCK_TEST_2 = "mock:test2";
+
+ private static final String MOCK_TEST_3 = "mock:test3";
+
+ private static final String MOCK_TEST_4 = "mock:test4";
+
private static final Logger LOG =
LoggerFactory.getLogger(MonitorItemTest.class);
@EndpointInject(MOCK_TEST_1)
protected MockEndpoint test1Endpoint;
+ @EndpointInject(MOCK_TEST_2)
+ protected MockEndpoint test2Endpoint;
+
+ @EndpointInject(MOCK_TEST_3)
+ protected MockEndpoint test3Endpoint;
+
+ @EndpointInject(MOCK_TEST_4)
+ protected MockEndpoint test4Endpoint;
+
@Produce(DIRECT_START_1)
protected ProducerTemplate producer1;
@@ -65,6 +109,9 @@ public class MonitorItemTest extends AbstractMiloServerTest {
from(DIRECT_START_1).to(MILO_SERVER_ITEM_1);
from(resolve(MILO_CLIENT_ITEM_C1_1)).to(MOCK_TEST_1);
+ from(resolve(MILO_CLIENT_ITEM_C1_2)).to(MOCK_TEST_2);
+ from(resolve(MILO_CLIENT_ITEM_C1_3)).to(MOCK_TEST_3);
+ from(resolve(MILO_CLIENT_ITEM_C2_1)).to(MOCK_TEST_4);
}
};
}
@@ -78,20 +125,63 @@ public class MonitorItemTest extends
AbstractMiloServerTest {
}
/**
- * Monitor multiple events
+ * Monitor multiple events With explicit parameters for
requestedPublishingInterval, samplingInterval, and queueSize
*/
@Test
public void testMonitorItem1() throws Exception {
/*
- * we will wait 2 * 1_000 milliseconds between server updates since the
- * default server update rate is 1_000 milliseconds
+ * we will wait 2 * 100 milliseconds between server updates since the
+ * explicitly set update rate is 100 milliseconds (samplingInterval)
in most clients.
+ * With 2000ms requestedPublishingInterval and bigger queueSize of 4
we should get all updates which change the value (in client 1).
+ * The test relies on milo's default discardOldest=true so the newest
value ("Done") survives a queue overflow,
+ * there is currently no parameter to change this.
+ * Extra clients have been added to test independence of parameters
set. See description on test endpoints
+ *
*/
- final var time = 2 * 1_000;
+ final var time = 2 * 100;
final var timeout = 10 * 1_000; // 10 seconds timeout for assertions
- // item 1 ... only this one receives
+ /*
+ * test1Endpoint is related to client C1_1 with:
requestedPublishingInterval=2000, samplingInterval=100,
+ * queueSize=4. It should get the 3 of the first 4 messages (with
changes) because of samplingInterval less
+ * than update rate and queueSize over 3 and an update pause of 2
seconds after they are sent.
+ * From the rest 16 messages, sent in about 3 seconds, some should be
dropped because of queueSize. They should
+ * fall into 2 (or 3 depending on exact timing) publishing periods, so
there should be at least 8 and at most 12 extra messages.
+ */
test1Endpoint.reset();
- test1Endpoint.setExpectedCount(3);
+ test1Endpoint.setMinimumExpectedMessageCount(11); // the first 3,
plus at least 8 more from rest (if they fall to 2 periods)
+ test1Endpoint.setAssertPeriod(3000);
+
+ /*
+ * test2Endpoint is related to client C1_2 which differs from C1_1
only in dataChangeFilterTrigger=StatusValueTimestamp,
+ * so it will get the 3rd update from the first set of 4 which does
not change the value.
+ */
+ test2Endpoint.reset();
+ test2Endpoint.setMinimumExpectedMessageCount(12); // the first 4,
plus at least 8 more from rest (if they fall to 2 periods)
+ test2Endpoint.setAssertPeriod(3000);
+
+ /*
+ * test3Endpoint is related to client C1_3 with:
requestedPublishingInterval=2000, samplingInterval=1000 from
+ * default, queueSize=4. It should get 1 (or 2 depending on exact
timing) of the first 3 messages because of
+ * samplingInterval and an update pause of 2 seconds after they are
sent. From the rest 16 messages, sent in
+ * about 3 seconds, only 3 or 4 should be sampled. So minimum is 4,
maximum is
+ * 6 messages
+ */
+ test3Endpoint.reset();
+ test3Endpoint.setMinimumExpectedMessageCount(4); // One or 2 of the
first 3, plus 3 or 4 of the remaining 16
+ test3Endpoint.setAssertPeriod(3000);
+
+ /*
+ * test4Endpoint is related to client C2_1 with:
requestedPublishingInterval=1000, samplingInterval=100,
+ * queueSize=3, It should get the first 3 messages because of
samplingInterval less than update rate and
+ * queueSize over 3 and an update pause of 2 seconds after they are
sent. From the rest 16 messages, sent in
+ * about 3 seconds, some should be dropped because of queueSize. They
should fall into 4 (or 5 depending on
+ * exact timing) publishing periods, so there should be at least 9 and
at most 11 extra messages (12 to 14 in
+ * total; the assertion below allows one more because the timing is
sensitive).
+ */
+ test4Endpoint.reset();
+ test4Endpoint.setMinimumExpectedMessageCount(12); // the first 3,
plus at least 3*3 more from rest (if they fall to 3 periods)
+ test4Endpoint.setAssertPeriod(3000);
// Allow time for OPC UA client-server connection to establish
await().pollDelay(1, TimeUnit.SECONDS).untilAsserted(() -> {
@@ -102,23 +192,61 @@ public class MonitorItemTest extends
AbstractMiloServerTest {
LOG.info("Server Port: {}", this.getServerPort());
LOG.info("Client URI resolved: {}", resolve(MILO_CLIENT_ITEM_C1_1));
- // set server values
+ // set server values sent faster than requestedPublishingInterval so
they must be put to queue
this.producer1.sendBody("Foo");
await().pollDelay(time, TimeUnit.MILLISECONDS).untilAsserted(() -> {
});
this.producer1.sendBody("Bar");
await().pollDelay(time, TimeUnit.MILLISECONDS).untilAsserted(() -> {
});
+ // This update will only be caught on MILO_CLIENT_ITEM_C1_2 because of
dataChangeFilterTrigger=StatusValueTimestamp
+ this.producer1.sendBody("Bar");
+ await().pollDelay(time, TimeUnit.MILLISECONDS).untilAsserted(() -> {
+ });
this.producer1.sendBody("Baz");
await().pollDelay(time, TimeUnit.MILLISECONDS).untilAsserted(() -> {
});
+ // now wait for requestedPublishingInterval so we are sure the 3
values are passed
+ await().pollDelay(10 * time, TimeUnit.MILLISECONDS).untilAsserted(()
-> {
+ });
+ for (int i = 1; i <= 15; i++) {
+ this.producer1.sendBody("Message " + i);
+ await().pollDelay(time, TimeUnit.MILLISECONDS).untilAsserted(() ->
{
+ });
+ }
+ this.producer1.sendBody("Done");
+
// tests
testBody(this.test1Endpoint.message(0), assertGoodValue("Foo"));
testBody(this.test1Endpoint.message(1), assertGoodValue("Bar"));
testBody(this.test1Endpoint.message(2), assertGoodValue("Baz"));
+ testBody(this.test2Endpoint.message(0), assertGoodValue("Foo"));
+ testBody(this.test2Endpoint.message(1), assertGoodValue("Bar"));
+ // this client should get the extra message without value change
+ testBody(this.test2Endpoint.message(2), assertGoodValue("Bar"));
+ testBody(this.test2Endpoint.message(3), assertGoodValue("Baz"));
+
// assert
MockEndpoint.assertIsSatisfied(context, timeout,
TimeUnit.MILLISECONDS);
+
+ // The number of messages must be less than the number sent, because
from the 15 messages sent at last part,
+ // about 10 should be in one requestedPublishingInterval, everything
over 4 should be dropped
+ int count1 = this.test1Endpoint.getReceivedCounter();
+ assertTrue(count1 < 18, "No messages have been dropped, but should
because of queueSize");
+
+ // get the last exchange, this must be the last one, if messages are
dropped it must be some in between
+ List<Exchange> receivedExchanges =
this.test1Endpoint.getReceivedExchanges();
+ Exchange last = receivedExchanges.get(receivedExchanges.size() - 1);
+ assertGoodValue("Done").accept((DataValue) last.getIn().getBody());
+
+ // The third client should get no more than 6 messages
+ int count3 = this.test3Endpoint.getReceivedCounter();
+ assertTrue(count3 <= 6, "Not enough messages have been dropped, but
should because of queueSize");
+
+ // The fourth client should get no more than 14 messages, because it
is very sensitive on the timing we allow 1 more
+ int count4 = this.test4Endpoint.getReceivedCounter();
+ assertTrue(count4 <= 15, "Not enough messages have been dropped, but
should because of queueSize");
}
}
diff --git
a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_23.adoc
b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_23.adoc
index 0754870bfa4d..c57fe1b0eac5 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_23.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_23.adoc
@@ -4854,6 +4854,19 @@ The `cancelCorrelationId` method of
`org.apache.camel.component.jms.reply.ReplyM
a `boolean`: `true` if the pending reply was cancelled, `false` if the request
timeout or the reply had already taken
it. A custom `ReplyManager` implementation has to change the return type.
+=== camel-milo - potential breaking change
+
+Since 4.16, the `samplingInterval` default of 0.0 was ignored and milo's own
`OpcUaMonitoredItem` default of 1000 ms
+was used. Now the parameter is used again, but the default is changed to
1000.0 to take the previous behaviour
+(starting with 4.16) into account.
+The same applies to a configured `requestedPublishingInterval` or data-change
filter, which now take effect.
+The parameter `requestedPublishingInterval` is now part of the cache key,
resulting in multiple clients for different
+values set.
+
+The parameter `dataChangeFilterDeadbandType` changes type from `UInteger` to
`Integer`.
+This changes the public `MonitorFilterConfiguration` getter/setter and the
endpoint-DSL builder method, so Java code
+passing a `UInteger` will no longer compile.
+
== ThrottlingExceptionRoutePolicy
`ThrottlingExceptionRoutePolicy.setKeepOpen(true)` now opens the circuit
immediately and synchronously (the consumer
diff --git
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MiloClientEndpointBuilderFactory.java
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MiloClientEndpointBuilderFactory.java
index 8c00914b1ba4..d6e3c02ca735 100644
---
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MiloClientEndpointBuilderFactory.java
+++
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MiloClientEndpointBuilderFactory.java
@@ -62,8 +62,7 @@ public interface MiloClientEndpointBuilderFactory {
/**
* Deadband type for MonitorFilterType DataChangeFilter.
*
- * The option is a:
- *
<code>org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger</code>
type.
+ * The option is a: <code>java.lang.Integer</code> type.
*
* Default: 0
* Group: common
@@ -71,15 +70,15 @@ public interface MiloClientEndpointBuilderFactory {
* @param dataChangeFilterDeadbandType the value to set
* @return the dsl builder
*/
- default MiloClientEndpointConsumerBuilder
dataChangeFilterDeadbandType(org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger
dataChangeFilterDeadbandType) {
+ default MiloClientEndpointConsumerBuilder
dataChangeFilterDeadbandType(Integer dataChangeFilterDeadbandType) {
doSetProperty("dataChangeFilterDeadbandType",
dataChangeFilterDeadbandType);
return this;
}
/**
* Deadband type for MonitorFilterType DataChangeFilter.
*
- * The option will be converted to a
- *
<code>org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger</code>
type.
+ * The option will be converted to a <code>java.lang.Integer</code>
+ * type.
*
* Default: 0
* Group: common
@@ -301,12 +300,43 @@ public interface MiloClientEndpointBuilderFactory {
doSetProperty("omitNullValues", omitNullValues);
return this;
}
+ /**
+ * The queue size used for OPC UA subscriptions. If not set, a queue
+ * size of 1 is requested.
+ *
+ * The option is a: <code>java.lang.Integer</code> type.
+ *
+ * Group: common
+ *
+ * @param queueSize the value to set
+ * @return the dsl builder
+ */
+ default MiloClientEndpointConsumerBuilder queueSize(Integer queueSize)
{
+ doSetProperty("queueSize", queueSize);
+ return this;
+ }
+ /**
+ * The queue size used for OPC UA subscriptions. If not set, a queue
+ * size of 1 is requested.
+ *
+ * The option will be converted to a <code>java.lang.Integer</code>
+ * type.
+ *
+ * Group: common
+ *
+ * @param queueSize the value to set
+ * @return the dsl builder
+ */
+ default MiloClientEndpointConsumerBuilder queueSize(String queueSize) {
+ doSetProperty("queueSize", queueSize);
+ return this;
+ }
/**
* The sampling interval in milliseconds.
*
* The option is a: <code>java.lang.Double</code> type.
*
- * Default: 0.0
+ * Default: 1000.0
* Group: common
*
* @param samplingInterval the value to set
@@ -321,7 +351,7 @@ public interface MiloClientEndpointBuilderFactory {
*
* The option will be converted to a <code>java.lang.Double</code>
type.
*
- * Default: 0.0
+ * Default: 1000.0
* Group: common
*
* @param samplingInterval the value to set
@@ -899,8 +929,7 @@ public interface MiloClientEndpointBuilderFactory {
/**
* Deadband type for MonitorFilterType DataChangeFilter.
*
- * The option is a:
- *
<code>org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger</code>
type.
+ * The option is a: <code>java.lang.Integer</code> type.
*
* Default: 0
* Group: common
@@ -908,15 +937,15 @@ public interface MiloClientEndpointBuilderFactory {
* @param dataChangeFilterDeadbandType the value to set
* @return the dsl builder
*/
- default MiloClientEndpointProducerBuilder
dataChangeFilterDeadbandType(org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger
dataChangeFilterDeadbandType) {
+ default MiloClientEndpointProducerBuilder
dataChangeFilterDeadbandType(Integer dataChangeFilterDeadbandType) {
doSetProperty("dataChangeFilterDeadbandType",
dataChangeFilterDeadbandType);
return this;
}
/**
* Deadband type for MonitorFilterType DataChangeFilter.
*
- * The option will be converted to a
- *
<code>org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger</code>
type.
+ * The option will be converted to a <code>java.lang.Integer</code>
+ * type.
*
* Default: 0
* Group: common
@@ -1138,12 +1167,43 @@ public interface MiloClientEndpointBuilderFactory {
doSetProperty("omitNullValues", omitNullValues);
return this;
}
+ /**
+ * The queue size used for OPC UA subscriptions. If not set, a queue
+ * size of 1 is requested.
+ *
+ * The option is a: <code>java.lang.Integer</code> type.
+ *
+ * Group: common
+ *
+ * @param queueSize the value to set
+ * @return the dsl builder
+ */
+ default MiloClientEndpointProducerBuilder queueSize(Integer queueSize)
{
+ doSetProperty("queueSize", queueSize);
+ return this;
+ }
+ /**
+ * The queue size used for OPC UA subscriptions. If not set, a queue
+ * size of 1 is requested.
+ *
+ * The option will be converted to a <code>java.lang.Integer</code>
+ * type.
+ *
+ * Group: common
+ *
+ * @param queueSize the value to set
+ * @return the dsl builder
+ */
+ default MiloClientEndpointProducerBuilder queueSize(String queueSize) {
+ doSetProperty("queueSize", queueSize);
+ return this;
+ }
/**
* The sampling interval in milliseconds.
*
* The option is a: <code>java.lang.Double</code> type.
*
- * Default: 0.0
+ * Default: 1000.0
* Group: common
*
* @param samplingInterval the value to set
@@ -1158,7 +1218,7 @@ public interface MiloClientEndpointBuilderFactory {
*
* The option will be converted to a <code>java.lang.Double</code>
type.
*
- * Default: 0.0
+ * Default: 1000.0
* Group: common
*
* @param samplingInterval the value to set
@@ -1665,8 +1725,7 @@ public interface MiloClientEndpointBuilderFactory {
/**
* Deadband type for MonitorFilterType DataChangeFilter.
*
- * The option is a:
- *
<code>org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger</code>
type.
+ * The option is a: <code>java.lang.Integer</code> type.
*
* Default: 0
* Group: common
@@ -1674,15 +1733,15 @@ public interface MiloClientEndpointBuilderFactory {
* @param dataChangeFilterDeadbandType the value to set
* @return the dsl builder
*/
- default MiloClientEndpointBuilder
dataChangeFilterDeadbandType(org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger
dataChangeFilterDeadbandType) {
+ default MiloClientEndpointBuilder dataChangeFilterDeadbandType(Integer
dataChangeFilterDeadbandType) {
doSetProperty("dataChangeFilterDeadbandType",
dataChangeFilterDeadbandType);
return this;
}
/**
* Deadband type for MonitorFilterType DataChangeFilter.
*
- * The option will be converted to a
- *
<code>org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger</code>
type.
+ * The option will be converted to a <code>java.lang.Integer</code>
+ * type.
*
* Default: 0
* Group: common
@@ -1904,12 +1963,43 @@ public interface MiloClientEndpointBuilderFactory {
doSetProperty("omitNullValues", omitNullValues);
return this;
}
+ /**
+ * The queue size used for OPC UA subscriptions. If not set, a queue
+ * size of 1 is requested.
+ *
+ * The option is a: <code>java.lang.Integer</code> type.
+ *
+ * Group: common
+ *
+ * @param queueSize the value to set
+ * @return the dsl builder
+ */
+ default MiloClientEndpointBuilder queueSize(Integer queueSize) {
+ doSetProperty("queueSize", queueSize);
+ return this;
+ }
+ /**
+ * The queue size used for OPC UA subscriptions. If not set, a queue
+ * size of 1 is requested.
+ *
+ * The option will be converted to a <code>java.lang.Integer</code>
+ * type.
+ *
+ * Group: common
+ *
+ * @param queueSize the value to set
+ * @return the dsl builder
+ */
+ default MiloClientEndpointBuilder queueSize(String queueSize) {
+ doSetProperty("queueSize", queueSize);
+ return this;
+ }
/**
* The sampling interval in milliseconds.
*
* The option is a: <code>java.lang.Double</code> type.
*
- * Default: 0.0
+ * Default: 1000.0
* Group: common
*
* @param samplingInterval the value to set
@@ -1924,7 +2014,7 @@ public interface MiloClientEndpointBuilderFactory {
*
* The option will be converted to a <code>java.lang.Double</code>
type.
*
- * Default: 0.0
+ * Default: 1000.0
* Group: common
*
* @param samplingInterval the value to set