This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch ra in repository https://gitbox.apache.org/repos/asf/camel.git
commit e8349f17eb5b949d42cc2eda54c75be42ba51ca2 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Thu May 23 18:49:21 2024 +0200 CAMEL-20798: Add RemoteAddress to endpoints so they can tell the url/hostname etc for the system it connects. This is needed for better monitoring, tracing and management. Add this information into camel-tracer as tags. --- .../apache/camel/catalog/components/ironmq.json | 62 +++---- .../camel/component/activemq/ActiveMQEndpoint.java | 43 ++++- .../component/activemq6/ActiveMQEndpoint.java | 43 ++++- .../component/ironmq/IronMQEndpointUriFactory.java | 4 +- .../org/apache/camel/component/ironmq/ironmq.json | 62 +++---- .../component/ironmq/IronMQConfiguration.java | 13 +- .../camel/component/ironmq/IronMQEndpoint.java | 8 +- .../apache/camel/component/jms/JmsComponent.java | 2 + .../camel/component/kafka/KafkaEndpoint.java | 17 +- .../apache/camel/component/nats/NatsEndpoint.java | 8 +- .../apache/camel/component/paho/PahoEndpoint.java | 23 ++- .../springrabbit/SpringRabbitMQEndpoint.java | 29 +++- .../camel/component/sql/DefaultSqlEndpoint.java | 23 ++- .../camel/component/stomp/StompEndpoint.java | 16 +- .../org/apache/camel/tracing/TagConstants.java | 4 + .../tracing/decorators/AbstractSpanDecorator.java | 20 +++ .../org/apache/camel/spi/RemoteAddressAware.java} | 46 +++--- .../camel/impl/console/EndpointDevConsole.java | 11 ++ .../api/management/mbean/ManagedEndpointMBean.java | 8 + .../camel/management/mbean/ManagedEndpoint.java | 19 +++ .../endpoint/dsl/IronMQEndpointBuilderFactory.java | 182 ++++++++++----------- .../jbang/core/commands/process/ListEndpoint.java | 30 ++++ .../apache/camel/kotlin/components/IronmqUriDsl.kt | 28 ++-- 23 files changed, 496 insertions(+), 205 deletions(-) diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ironmq.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ironmq.json index 01acaab1f8c..8697fd34348 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ironmq.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ironmq.json @@ -37,36 +37,36 @@ }, "properties": { "queueName": { "index": 0, "kind": "path", "displayName": "Queue Name", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "The name of the IronMQ queue" }, - "client": { "index": 1, "kind": "parameter", "displayName": "Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "io.iron.ironmq.Client", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "Reference to a io.iron.ironmq.Client in the Registry." }, - "ironMQCloud": { "index": 2, "kind": "parameter", "displayName": "Iron MQCloud", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "https:\/\/mq-aws-us-east-1-1.iron.io", "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "IronMq Cloud url. Urls for public clusters: https:\/\/mq-a [...] - "preserveHeaders": { "index": 3, "kind": "parameter", "displayName": "Preserve Headers", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "Should message headers be preserved when publishing messages. This will add the Camel heade [...] - "projectId": { "index": 4, "kind": "parameter", "displayName": "Project Id", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "IronMQ projectId" }, - "token": { "index": 5, "kind": "parameter", "displayName": "Token", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "IronMQ token" }, - "batchDelete": { "index": 6, "kind": "parameter", "displayName": "Batch Delete", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "Should messages be deleted in one batch. This will limit the number of api requests since [...] - "concurrentConsumers": { "index": 7, "kind": "parameter", "displayName": "Concurrent Consumers", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "The number of concurrent consumers." }, - "maxMessagesPerPoll": { "index": 8, "kind": "parameter", "displayName": "Max Messages Per Poll", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "Number of messages to poll pr. call. Maximum is 100." }, - "sendEmptyMessageWhenIdle": { "index": 9, "kind": "parameter", "displayName": "Send Empty Message When Idle", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead." }, - "timeout": { "index": 10, "kind": "parameter", "displayName": "Timeout", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 60, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "After timeout (in seconds), item will be placed back onto the queue." }, - "wait": { "index": 11, "kind": "parameter", "displayName": "Wait", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "Time in seconds to wait for a message to become available. This enables long polling. Default is 0 (does not wait), maximum is 30." }, - "bridgeErrorHandler": { "index": 12, "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": 13, "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": 14, "kind": "parameter", "displayName": "Exchange Pattern", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "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." }, - "pollStrategy": { "index": 15, "kind": "parameter", "displayName": "Poll Strategy", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.PollingConsumerPollStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the po [...] - "visibilityDelay": { "index": 16, "kind": "parameter", "displayName": "Visibility Delay", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "The item will not be available on the queue until this many seconds have passed. Default is 0 seconds." }, - "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 [...] - "backoffErrorThreshold": { "index": 18, "kind": "parameter", "displayName": "Backoff Error Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in." }, - "backoffIdleThreshold": { "index": 19, "kind": "parameter", "displayName": "Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent idle polls that should happen before the backoffMultipler should kick-in." }, - "backoffMultiplier": { "index": 20, "kind": "parameter", "displayName": "Backoff Multiplier", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "To let the scheduled polling consumer backoff if there has been a number of subsequent idles\/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is h [...] - "delay": { "index": 21, "kind": "parameter", "displayName": "Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 500, "description": "Milliseconds before the next poll." }, - "greedy": { "index": 22, "kind": "parameter", "displayName": "Greedy", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the previous run polled 1 or more messages." }, - "initialDelay": { "index": 23, "kind": "parameter", "displayName": "Initial Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1000, "description": "Milliseconds before the first poll starts." }, - "repeatCount": { "index": 24, "kind": "parameter", "displayName": "Repeat Count", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "description": "Specifies a maximum limit of number of fires. So if you set it to 1, the scheduler will only fire once. If you set it to 5, it will only fire five times. A value of zero or negative means fire forever." }, - "runLoggingLevel": { "index": 25, "kind": "parameter", "displayName": "Run Logging Level", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "TRACE", "description": "The consumer logs a start\/complete log line when it polls. This option allows you to configure the l [...] - "scheduledExecutorService": { "index": 26, "kind": "parameter", "displayName": "Scheduled Executor Service", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.util.concurrent.ScheduledExecutorService", "deprecated": false, "autowired": false, "secret": false, "description": "Allows for configuring a custom\/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool." }, - "scheduler": { "index": 27, "kind": "parameter", "displayName": "Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.lang.Object", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "none", "description": "To use a cron scheduler from either camel-spring or camel-quartz component. Use value spring or quartz for built in scheduler" }, - "schedulerProperties": { "index": 28, "kind": "parameter", "displayName": "Scheduler Properties", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix": "scheduler.", "multiValue": true, "deprecated": false, "autowired": false, "secret": false, "description": "To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler." }, - "startScheduler": { "index": 29, "kind": "parameter", "displayName": "Start Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether the scheduler should be auto started." }, - "timeUnit": { "index": 30, "kind": "parameter", "displayName": "Time Unit", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.util.concurrent.TimeUnit", "enum": [ "NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", "DAYS" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "MILLISECONDS", "description": "Time unit for initialDelay and delay options." }, - "useFixedDelay": { "index": 31, "kind": "parameter", "displayName": "Use Fixed Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details." } + "ironMQCloud": { "index": 1, "kind": "parameter", "displayName": "Iron MQCloud", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "https:\/\/mq-aws-us-east-1-1.iron.io", "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "IronMq Cloud url. Urls for public clusters: https:\/\/mq-a [...] + "preserveHeaders": { "index": 2, "kind": "parameter", "displayName": "Preserve Headers", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "Should message headers be preserved when publishing messages. This will add the Camel heade [...] + "projectId": { "index": 3, "kind": "parameter", "displayName": "Project Id", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "IronMQ projectId" }, + "batchDelete": { "index": 4, "kind": "parameter", "displayName": "Batch Delete", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "Should messages be deleted in one batch. This will limit the number of api requests since [...] + "concurrentConsumers": { "index": 5, "kind": "parameter", "displayName": "Concurrent Consumers", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "The number of concurrent consumers." }, + "maxMessagesPerPoll": { "index": 6, "kind": "parameter", "displayName": "Max Messages Per Poll", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "Number of messages to poll pr. call. Maximum is 100." }, + "sendEmptyMessageWhenIdle": { "index": 7, "kind": "parameter", "displayName": "Send Empty Message When Idle", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead." }, + "timeout": { "index": 8, "kind": "parameter", "displayName": "Timeout", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 60, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "After timeout (in seconds), item will be placed back onto the queue." }, + "wait": { "index": 9, "kind": "parameter", "displayName": "Wait", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "Time in seconds to wait for a message to become available. This enables long polling. Default is 0 (does not wait), maximum is 30." }, + "bridgeErrorHandler": { "index": 10, "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": 11, "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": 12, "kind": "parameter", "displayName": "Exchange Pattern", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "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." }, + "pollStrategy": { "index": 13, "kind": "parameter", "displayName": "Poll Strategy", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.PollingConsumerPollStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the po [...] + "visibilityDelay": { "index": 14, "kind": "parameter", "displayName": "Visibility Delay", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "The item will not be available on the queue until this many seconds have passed. Default is 0 seconds." }, + "lazyStartProducer": { "index": 15, "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 [...] + "client": { "index": 16, "kind": "parameter", "displayName": "Client", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "io.iron.ironmq.Client", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "Reference to a io.iron.ironmq.Client in the Registry." }, + "backoffErrorThreshold": { "index": 17, "kind": "parameter", "displayName": "Backoff Error Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in." }, + "backoffIdleThreshold": { "index": 18, "kind": "parameter", "displayName": "Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent idle polls that should happen before the backoffMultipler should kick-in." }, + "backoffMultiplier": { "index": 19, "kind": "parameter", "displayName": "Backoff Multiplier", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "To let the scheduled polling consumer backoff if there has been a number of subsequent idles\/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is h [...] + "delay": { "index": 20, "kind": "parameter", "displayName": "Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 500, "description": "Milliseconds before the next poll." }, + "greedy": { "index": 21, "kind": "parameter", "displayName": "Greedy", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the previous run polled 1 or more messages." }, + "initialDelay": { "index": 22, "kind": "parameter", "displayName": "Initial Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1000, "description": "Milliseconds before the first poll starts." }, + "repeatCount": { "index": 23, "kind": "parameter", "displayName": "Repeat Count", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "description": "Specifies a maximum limit of number of fires. So if you set it to 1, the scheduler will only fire once. If you set it to 5, it will only fire five times. A value of zero or negative means fire forever." }, + "runLoggingLevel": { "index": 24, "kind": "parameter", "displayName": "Run Logging Level", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "TRACE", "description": "The consumer logs a start\/complete log line when it polls. This option allows you to configure the l [...] + "scheduledExecutorService": { "index": 25, "kind": "parameter", "displayName": "Scheduled Executor Service", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.util.concurrent.ScheduledExecutorService", "deprecated": false, "autowired": false, "secret": false, "description": "Allows for configuring a custom\/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool." }, + "scheduler": { "index": 26, "kind": "parameter", "displayName": "Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.lang.Object", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "none", "description": "To use a cron scheduler from either camel-spring or camel-quartz component. Use value spring or quartz for built in scheduler" }, + "schedulerProperties": { "index": 27, "kind": "parameter", "displayName": "Scheduler Properties", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix": "scheduler.", "multiValue": true, "deprecated": false, "autowired": false, "secret": false, "description": "To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler." }, + "startScheduler": { "index": 28, "kind": "parameter", "displayName": "Start Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether the scheduler should be auto started." }, + "timeUnit": { "index": 29, "kind": "parameter", "displayName": "Time Unit", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.util.concurrent.TimeUnit", "enum": [ "NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", "DAYS" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "MILLISECONDS", "description": "Time unit for initialDelay and delay options." }, + "useFixedDelay": { "index": 30, "kind": "parameter", "displayName": "Use Fixed Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details." }, + "token": { "index": 31, "kind": "parameter", "displayName": "Token", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "IronMQ token" } } } diff --git a/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/ActiveMQEndpoint.java b/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/ActiveMQEndpoint.java index bea3f0be8a7..caf63bf815f 100644 --- a/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/ActiveMQEndpoint.java +++ b/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/ActiveMQEndpoint.java @@ -16,6 +16,7 @@ */ package org.apache.camel.component.activemq; +import java.util.HashMap; import java.util.Map; import org.apache.camel.Category; @@ -23,6 +24,7 @@ import org.apache.camel.component.jms.JmsBinding; import org.apache.camel.component.jms.JmsComponent; import org.apache.camel.component.jms.JmsConfiguration; import org.apache.camel.component.jms.JmsEndpoint; +import org.apache.camel.spi.RemoteAddressAware; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; @@ -32,7 +34,7 @@ import org.apache.camel.spi.UriParam; @UriEndpoint(firstVersion = "1.0.0", extendsScheme = "jms", scheme = "activemq", title = "ActiveMQ 5.x", syntax = "activemq:destinationType:destinationName", category = { Category.MESSAGING }) -public class ActiveMQEndpoint extends JmsEndpoint { +public class ActiveMQEndpoint extends JmsEndpoint implements RemoteAddressAware { @UriParam(multiValue = true, prefix = "destination.", label = "consumer,advanced") private Map<String, String> destinationOptions; @@ -58,6 +60,45 @@ public class ActiveMQEndpoint extends JmsEndpoint { super(endpointUri, destinationName); } + @Override + public String getAddress() { + String url = null; + if (getConfiguration() instanceof ActiveMQConfiguration acc) { + url = acc.getBrokerURL(); + } + if (url == null && getComponent() instanceof ActiveMQComponent amq) { + url = amq.getBrokerURL(); + } + return url; + } + + @Override + public Map<String, String> getAddressMetadata() { + String un = null; + String cid = null; + if (getConfiguration() instanceof ActiveMQConfiguration acc) { + un = acc.getUsername(); + cid = acc.getClientId(); + } + if (un == null) { + un = getComponent().getUsername(); + } + if (cid == null) { + cid = getClientId(); + } + if (un == null && cid == null) { + return null; + } + Map<String, String> map = new HashMap<>(); + if (un != null) { + map.put("username", un); + } + if (cid != null) { + map.put("clientId", cid); + } + return map; + } + public Map<String, String> getDestinationOptions() { return destinationOptions; } diff --git a/components/camel-activemq6/src/main/java/org/apache/camel/component/activemq6/ActiveMQEndpoint.java b/components/camel-activemq6/src/main/java/org/apache/camel/component/activemq6/ActiveMQEndpoint.java index dc933e7946e..29bfce5ad32 100644 --- a/components/camel-activemq6/src/main/java/org/apache/camel/component/activemq6/ActiveMQEndpoint.java +++ b/components/camel-activemq6/src/main/java/org/apache/camel/component/activemq6/ActiveMQEndpoint.java @@ -16,6 +16,7 @@ */ package org.apache.camel.component.activemq6; +import java.util.HashMap; import java.util.Map; import org.apache.camel.Category; @@ -23,6 +24,7 @@ import org.apache.camel.component.jms.JmsBinding; import org.apache.camel.component.jms.JmsComponent; import org.apache.camel.component.jms.JmsConfiguration; import org.apache.camel.component.jms.JmsEndpoint; +import org.apache.camel.spi.RemoteAddressAware; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; @@ -32,7 +34,7 @@ import org.apache.camel.spi.UriParam; @UriEndpoint(firstVersion = "4.7.0", extendsScheme = "jms", scheme = "activemq6", title = "ActiveMQ 6.x", syntax = "activemq6:destinationType:destinationName", category = { Category.MESSAGING }) -public class ActiveMQEndpoint extends JmsEndpoint { +public class ActiveMQEndpoint extends JmsEndpoint implements RemoteAddressAware { @UriParam(multiValue = true, prefix = "destination.", label = "consumer,advanced") private Map<String, String> destinationOptions; @@ -58,6 +60,45 @@ public class ActiveMQEndpoint extends JmsEndpoint { super(endpointUri, destinationName); } + @Override + public String getAddress() { + String url = null; + if (getConfiguration() instanceof ActiveMQConfiguration acc) { + url = acc.getBrokerURL(); + } + if (url == null && getComponent() instanceof ActiveMQComponent amq) { + url = amq.getBrokerURL(); + } + return url; + } + + @Override + public Map<String, String> getAddressMetadata() { + String un = null; + String cid = null; + if (getConfiguration() instanceof ActiveMQConfiguration acc) { + un = acc.getUsername(); + cid = acc.getClientId(); + } + if (un == null) { + un = getComponent().getUsername(); + } + if (cid == null) { + cid = getClientId(); + } + if (un == null && cid == null) { + return null; + } + Map<String, String> map = new HashMap<>(); + if (un != null) { + map.put("username", un); + } + if (cid != null) { + map.put("clientId", cid); + } + return map; + } + public Map<String, String> getDestinationOptions() { return destinationOptions; } diff --git a/components/camel-ironmq/src/generated/java/org/apache/camel/component/ironmq/IronMQEndpointUriFactory.java b/components/camel-ironmq/src/generated/java/org/apache/camel/component/ironmq/IronMQEndpointUriFactory.java index c2bde0d34dc..37e3fa4a567 100644 --- a/components/camel-ironmq/src/generated/java/org/apache/camel/component/ironmq/IronMQEndpointUriFactory.java +++ b/components/camel-ironmq/src/generated/java/org/apache/camel/component/ironmq/IronMQEndpointUriFactory.java @@ -57,7 +57,9 @@ public class IronMQEndpointUriFactory extends org.apache.camel.support.component props.add("visibilityDelay"); props.add("wait"); PROPERTY_NAMES = Collections.unmodifiableSet(props); - SECRET_PROPERTY_NAMES = Collections.emptySet(); + Set<String> secretProps = new HashSet<>(1); + secretProps.add("token"); + SECRET_PROPERTY_NAMES = Collections.unmodifiableSet(secretProps); Set<String> prefixes = new HashSet<>(1); prefixes.add("scheduler."); MULTI_VALUE_PREFIXES = Collections.unmodifiableSet(prefixes); diff --git a/components/camel-ironmq/src/generated/resources/META-INF/org/apache/camel/component/ironmq/ironmq.json b/components/camel-ironmq/src/generated/resources/META-INF/org/apache/camel/component/ironmq/ironmq.json index 01acaab1f8c..8697fd34348 100644 --- a/components/camel-ironmq/src/generated/resources/META-INF/org/apache/camel/component/ironmq/ironmq.json +++ b/components/camel-ironmq/src/generated/resources/META-INF/org/apache/camel/component/ironmq/ironmq.json @@ -37,36 +37,36 @@ }, "properties": { "queueName": { "index": 0, "kind": "path", "displayName": "Queue Name", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "The name of the IronMQ queue" }, - "client": { "index": 1, "kind": "parameter", "displayName": "Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "io.iron.ironmq.Client", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "Reference to a io.iron.ironmq.Client in the Registry." }, - "ironMQCloud": { "index": 2, "kind": "parameter", "displayName": "Iron MQCloud", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "https:\/\/mq-aws-us-east-1-1.iron.io", "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "IronMq Cloud url. Urls for public clusters: https:\/\/mq-a [...] - "preserveHeaders": { "index": 3, "kind": "parameter", "displayName": "Preserve Headers", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "Should message headers be preserved when publishing messages. This will add the Camel heade [...] - "projectId": { "index": 4, "kind": "parameter", "displayName": "Project Id", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "IronMQ projectId" }, - "token": { "index": 5, "kind": "parameter", "displayName": "Token", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "IronMQ token" }, - "batchDelete": { "index": 6, "kind": "parameter", "displayName": "Batch Delete", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "Should messages be deleted in one batch. This will limit the number of api requests since [...] - "concurrentConsumers": { "index": 7, "kind": "parameter", "displayName": "Concurrent Consumers", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "The number of concurrent consumers." }, - "maxMessagesPerPoll": { "index": 8, "kind": "parameter", "displayName": "Max Messages Per Poll", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "Number of messages to poll pr. call. Maximum is 100." }, - "sendEmptyMessageWhenIdle": { "index": 9, "kind": "parameter", "displayName": "Send Empty Message When Idle", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead." }, - "timeout": { "index": 10, "kind": "parameter", "displayName": "Timeout", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 60, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "After timeout (in seconds), item will be placed back onto the queue." }, - "wait": { "index": 11, "kind": "parameter", "displayName": "Wait", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "Time in seconds to wait for a message to become available. This enables long polling. Default is 0 (does not wait), maximum is 30." }, - "bridgeErrorHandler": { "index": 12, "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": 13, "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": 14, "kind": "parameter", "displayName": "Exchange Pattern", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "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." }, - "pollStrategy": { "index": 15, "kind": "parameter", "displayName": "Poll Strategy", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.PollingConsumerPollStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the po [...] - "visibilityDelay": { "index": 16, "kind": "parameter", "displayName": "Visibility Delay", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "The item will not be available on the queue until this many seconds have passed. Default is 0 seconds." }, - "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 [...] - "backoffErrorThreshold": { "index": 18, "kind": "parameter", "displayName": "Backoff Error Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in." }, - "backoffIdleThreshold": { "index": 19, "kind": "parameter", "displayName": "Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent idle polls that should happen before the backoffMultipler should kick-in." }, - "backoffMultiplier": { "index": 20, "kind": "parameter", "displayName": "Backoff Multiplier", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "To let the scheduled polling consumer backoff if there has been a number of subsequent idles\/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is h [...] - "delay": { "index": 21, "kind": "parameter", "displayName": "Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 500, "description": "Milliseconds before the next poll." }, - "greedy": { "index": 22, "kind": "parameter", "displayName": "Greedy", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the previous run polled 1 or more messages." }, - "initialDelay": { "index": 23, "kind": "parameter", "displayName": "Initial Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1000, "description": "Milliseconds before the first poll starts." }, - "repeatCount": { "index": 24, "kind": "parameter", "displayName": "Repeat Count", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "description": "Specifies a maximum limit of number of fires. So if you set it to 1, the scheduler will only fire once. If you set it to 5, it will only fire five times. A value of zero or negative means fire forever." }, - "runLoggingLevel": { "index": 25, "kind": "parameter", "displayName": "Run Logging Level", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "TRACE", "description": "The consumer logs a start\/complete log line when it polls. This option allows you to configure the l [...] - "scheduledExecutorService": { "index": 26, "kind": "parameter", "displayName": "Scheduled Executor Service", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.util.concurrent.ScheduledExecutorService", "deprecated": false, "autowired": false, "secret": false, "description": "Allows for configuring a custom\/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool." }, - "scheduler": { "index": 27, "kind": "parameter", "displayName": "Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.lang.Object", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "none", "description": "To use a cron scheduler from either camel-spring or camel-quartz component. Use value spring or quartz for built in scheduler" }, - "schedulerProperties": { "index": 28, "kind": "parameter", "displayName": "Scheduler Properties", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix": "scheduler.", "multiValue": true, "deprecated": false, "autowired": false, "secret": false, "description": "To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler." }, - "startScheduler": { "index": 29, "kind": "parameter", "displayName": "Start Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether the scheduler should be auto started." }, - "timeUnit": { "index": 30, "kind": "parameter", "displayName": "Time Unit", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.util.concurrent.TimeUnit", "enum": [ "NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", "DAYS" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "MILLISECONDS", "description": "Time unit for initialDelay and delay options." }, - "useFixedDelay": { "index": 31, "kind": "parameter", "displayName": "Use Fixed Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details." } + "ironMQCloud": { "index": 1, "kind": "parameter", "displayName": "Iron MQCloud", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "https:\/\/mq-aws-us-east-1-1.iron.io", "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "IronMq Cloud url. Urls for public clusters: https:\/\/mq-a [...] + "preserveHeaders": { "index": 2, "kind": "parameter", "displayName": "Preserve Headers", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "Should message headers be preserved when publishing messages. This will add the Camel heade [...] + "projectId": { "index": 3, "kind": "parameter", "displayName": "Project Id", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "IronMQ projectId" }, + "batchDelete": { "index": 4, "kind": "parameter", "displayName": "Batch Delete", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "Should messages be deleted in one batch. This will limit the number of api requests since [...] + "concurrentConsumers": { "index": 5, "kind": "parameter", "displayName": "Concurrent Consumers", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "The number of concurrent consumers." }, + "maxMessagesPerPoll": { "index": 6, "kind": "parameter", "displayName": "Max Messages Per Poll", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "Number of messages to poll pr. call. Maximum is 100." }, + "sendEmptyMessageWhenIdle": { "index": 7, "kind": "parameter", "displayName": "Send Empty Message When Idle", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead." }, + "timeout": { "index": 8, "kind": "parameter", "displayName": "Timeout", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 60, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "After timeout (in seconds), item will be placed back onto the queue." }, + "wait": { "index": 9, "kind": "parameter", "displayName": "Wait", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "Time in seconds to wait for a message to become available. This enables long polling. Default is 0 (does not wait), maximum is 30." }, + "bridgeErrorHandler": { "index": 10, "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": 11, "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": 12, "kind": "parameter", "displayName": "Exchange Pattern", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "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." }, + "pollStrategy": { "index": 13, "kind": "parameter", "displayName": "Poll Strategy", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.PollingConsumerPollStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the po [...] + "visibilityDelay": { "index": 14, "kind": "parameter", "displayName": "Visibility Delay", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "The item will not be available on the queue until this many seconds have passed. Default is 0 seconds." }, + "lazyStartProducer": { "index": 15, "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 [...] + "client": { "index": 16, "kind": "parameter", "displayName": "Client", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "io.iron.ironmq.Client", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "Reference to a io.iron.ironmq.Client in the Registry." }, + "backoffErrorThreshold": { "index": 17, "kind": "parameter", "displayName": "Backoff Error Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in." }, + "backoffIdleThreshold": { "index": 18, "kind": "parameter", "displayName": "Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent idle polls that should happen before the backoffMultipler should kick-in." }, + "backoffMultiplier": { "index": 19, "kind": "parameter", "displayName": "Backoff Multiplier", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "To let the scheduled polling consumer backoff if there has been a number of subsequent idles\/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is h [...] + "delay": { "index": 20, "kind": "parameter", "displayName": "Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 500, "description": "Milliseconds before the next poll." }, + "greedy": { "index": 21, "kind": "parameter", "displayName": "Greedy", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the previous run polled 1 or more messages." }, + "initialDelay": { "index": 22, "kind": "parameter", "displayName": "Initial Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1000, "description": "Milliseconds before the first poll starts." }, + "repeatCount": { "index": 23, "kind": "parameter", "displayName": "Repeat Count", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "description": "Specifies a maximum limit of number of fires. So if you set it to 1, the scheduler will only fire once. If you set it to 5, it will only fire five times. A value of zero or negative means fire forever." }, + "runLoggingLevel": { "index": 24, "kind": "parameter", "displayName": "Run Logging Level", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "TRACE", "description": "The consumer logs a start\/complete log line when it polls. This option allows you to configure the l [...] + "scheduledExecutorService": { "index": 25, "kind": "parameter", "displayName": "Scheduled Executor Service", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.util.concurrent.ScheduledExecutorService", "deprecated": false, "autowired": false, "secret": false, "description": "Allows for configuring a custom\/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool." }, + "scheduler": { "index": 26, "kind": "parameter", "displayName": "Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.lang.Object", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "none", "description": "To use a cron scheduler from either camel-spring or camel-quartz component. Use value spring or quartz for built in scheduler" }, + "schedulerProperties": { "index": 27, "kind": "parameter", "displayName": "Scheduler Properties", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix": "scheduler.", "multiValue": true, "deprecated": false, "autowired": false, "secret": false, "description": "To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler." }, + "startScheduler": { "index": 28, "kind": "parameter", "displayName": "Start Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether the scheduler should be auto started." }, + "timeUnit": { "index": 29, "kind": "parameter", "displayName": "Time Unit", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.util.concurrent.TimeUnit", "enum": [ "NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", "DAYS" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "MILLISECONDS", "description": "Time unit for initialDelay and delay options." }, + "useFixedDelay": { "index": 30, "kind": "parameter", "displayName": "Use Fixed Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details." }, + "token": { "index": 31, "kind": "parameter", "displayName": "Token", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.ironmq.IronMQConfiguration", "configurationField": "configuration", "description": "IronMQ token" } } } diff --git a/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQConfiguration.java b/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQConfiguration.java index 9117a2802d0..003f3f90a40 100644 --- a/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQConfiguration.java +++ b/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQConfiguration.java @@ -26,23 +26,24 @@ import org.apache.camel.spi.UriPath; public class IronMQConfiguration { // common properties + @UriPath + @Metadata(required = true) + private String queueName; + @UriParam private String projectId; - @UriParam + @UriParam(label = "security") + @Metadata(secret = true) private String token; - @UriPath - @Metadata(required = true) - private String queueName; - @UriParam(defaultValue = "https://mq-aws-us-east-1-1.iron.io") private String ironMQCloud = "https://mq-aws-us-east-1-1.iron.io"; @UriParam private boolean preserveHeaders; - @UriParam + @UriParam(label = "advanced") private Client client; // producer properties diff --git a/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQEndpoint.java b/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQEndpoint.java index af4367b0b8c..c9897e968eb 100644 --- a/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQEndpoint.java +++ b/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQEndpoint.java @@ -24,6 +24,7 @@ import org.apache.camel.Category; import org.apache.camel.Consumer; import org.apache.camel.Processor; import org.apache.camel.Producer; +import org.apache.camel.spi.RemoteAddressAware; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; import org.apache.camel.support.ScheduledPollEndpoint; @@ -36,7 +37,7 @@ import org.slf4j.LoggerFactory; */ @UriEndpoint(firstVersion = "2.17.0", scheme = "ironmq", syntax = "ironmq:queueName", title = "IronMQ", category = { Category.CLOUD, Category.MESSAGING }, headersClass = IronMQConstants.class) -public class IronMQEndpoint extends ScheduledPollEndpoint { +public class IronMQEndpoint extends ScheduledPollEndpoint implements RemoteAddressAware { private static final Logger LOG = LoggerFactory.getLogger(IronMQEndpoint.class); @@ -75,6 +76,11 @@ public class IronMQEndpoint extends ScheduledPollEndpoint { super.doStop(); } + @Override + public String getAddress() { + return configuration.getIronMQCloud(); + } + public Client getClient() { if (client == null) { client = createClient(); diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java index 74e739ae9d4..2ed9c40a8ad 100644 --- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java +++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java @@ -1207,6 +1207,8 @@ public class JmsComponent extends HeaderFilterStrategyComponent { ucfa.setPassword(cfPassword); ucfa.setUsername(cfUsername); endpoint.getConfiguration().setConnectionFactory(ucfa); + endpoint.getConfiguration().setUsername(cfUsername); + endpoint.getConfiguration().setPassword(cfPassword); } else { // if only username or password was provided then fail if (cfUsername != null || cfPassword != null) { diff --git a/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/KafkaEndpoint.java b/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/KafkaEndpoint.java index e28309b55d2..1bfbc129b9a 100644 --- a/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/KafkaEndpoint.java +++ b/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/KafkaEndpoint.java @@ -16,6 +16,7 @@ */ package org.apache.camel.component.kafka; +import java.util.Map; import java.util.Properties; import java.util.concurrent.ExecutorService; @@ -27,6 +28,7 @@ import org.apache.camel.Producer; import org.apache.camel.component.kafka.consumer.KafkaManualCommit; import org.apache.camel.component.kafka.consumer.KafkaManualCommitFactory; import org.apache.camel.spi.ClassResolver; +import org.apache.camel.spi.RemoteAddressAware; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; import org.apache.camel.support.DefaultEndpoint; @@ -46,7 +48,7 @@ import org.slf4j.LoggerFactory; */ @UriEndpoint(firstVersion = "2.13.0", scheme = "kafka", title = "Kafka", syntax = "kafka:topic", category = { Category.MESSAGING }, headersClass = KafkaConstants.class) -public class KafkaEndpoint extends DefaultEndpoint implements MultipleConsumersSupport { +public class KafkaEndpoint extends DefaultEndpoint implements MultipleConsumersSupport, RemoteAddressAware { private static final Logger LOG = LoggerFactory.getLogger(KafkaEndpoint.class); @@ -71,6 +73,19 @@ public class KafkaEndpoint extends DefaultEndpoint implements MultipleConsumersS return (KafkaComponent) super.getComponent(); } + @Override + public String getAddress() { + return configuration.getBrokers(); + } + + @Override + public Map<String, String> getAddressMetadata() { + if (configuration.getClientId() != null) { + return Map.of("clientId", configuration.getClientId()); + } + return null; + } + public KafkaConfiguration getConfiguration() { return configuration; } diff --git a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsEndpoint.java b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsEndpoint.java index 2edaa653b4d..1ab1735a1f4 100644 --- a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsEndpoint.java +++ b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsEndpoint.java @@ -33,6 +33,7 @@ import org.apache.camel.Processor; import org.apache.camel.Producer; import org.apache.camel.spi.HeaderFilterStrategy; import org.apache.camel.spi.HeaderFilterStrategyAware; +import org.apache.camel.spi.RemoteAddressAware; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; import org.apache.camel.support.DefaultEndpoint; @@ -44,7 +45,7 @@ import org.apache.camel.util.ObjectHelper; */ @UriEndpoint(firstVersion = "2.17.0", scheme = "nats", title = "Nats", syntax = "nats:topic", category = { Category.MESSAGING }, headersClass = NatsConstants.class) -public class NatsEndpoint extends DefaultEndpoint implements MultipleConsumersSupport, HeaderFilterStrategyAware { +public class NatsEndpoint extends DefaultEndpoint implements MultipleConsumersSupport, HeaderFilterStrategyAware, RemoteAddressAware { @UriParam private NatsConfiguration configuration; @@ -71,6 +72,11 @@ public class NatsEndpoint extends DefaultEndpoint implements MultipleConsumersSu return true; } + @Override + public String getAddress() { + return getConfiguration().getServers(); + } + public ExecutorService createExecutor() { return getCamelContext().getExecutorServiceManager().newFixedThreadPool(this, "NatsTopic[" + configuration.getTopic() + "]", configuration.getPoolSize()); diff --git a/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoEndpoint.java b/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoEndpoint.java index 8c8fc9a64cb..6e787178073 100644 --- a/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoEndpoint.java +++ b/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoEndpoint.java @@ -21,6 +21,7 @@ import org.apache.camel.Consumer; import org.apache.camel.Processor; import org.apache.camel.Producer; import org.apache.camel.spi.Metadata; +import org.apache.camel.spi.RemoteAddressAware; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; import org.apache.camel.spi.UriPath; @@ -32,12 +33,15 @@ import org.eclipse.paho.client.mqttv3.MqttConnectOptions; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; import org.eclipse.paho.client.mqttv3.persist.MqttDefaultFilePersistence; +import java.util.HashMap; +import java.util.Map; + /** * Communicate with MQTT message brokers using Eclipse Paho MQTT Client. */ @UriEndpoint(firstVersion = "2.16.0", scheme = "paho", title = "Paho", category = { Category.MESSAGING, Category.IOT }, syntax = "paho:topic", headersClass = PahoConstants.class) -public class PahoEndpoint extends DefaultEndpoint { +public class PahoEndpoint extends DefaultEndpoint implements RemoteAddressAware { // Configuration members @UriPath(description = "Name of the topic") @@ -69,6 +73,23 @@ public class PahoEndpoint extends DefaultEndpoint { return consumer; } + @Override + public String getAddress() { + return configuration.getBrokerUrl(); + } + + @Override + public Map<String, String> getAddressMetadata() { + Map<String, String> map = new HashMap<>(); + if (configuration.getClientId() != null) { + map.put("clientId", configuration.getClientId()); + } + if (configuration.getUserName() != null) { + map.put("username", configuration.getUserName()); + } + return map.isEmpty() ? null : map; + } + @Override public PahoComponent getComponent() { return (PahoComponent) super.getComponent(); diff --git a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQEndpoint.java b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQEndpoint.java index 20efa25834b..876428c6537 100644 --- a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQEndpoint.java +++ b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQEndpoint.java @@ -27,6 +27,7 @@ import org.apache.camel.PollingConsumer; import org.apache.camel.Processor; import org.apache.camel.Producer; import org.apache.camel.spi.Metadata; +import org.apache.camel.spi.RemoteAddressAware; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; import org.apache.camel.spi.UriPath; @@ -56,7 +57,7 @@ import static org.apache.camel.component.springrabbit.SpringRabbitMQConstants.DI @UriEndpoint(firstVersion = "3.8.0", scheme = "spring-rabbitmq", title = "Spring RabbitMQ", syntax = "spring-rabbitmq:exchangeName", category = { Category.MESSAGING }, headersClass = SpringRabbitMQConstants.class) -public class SpringRabbitMQEndpoint extends DefaultEndpoint implements AsyncEndpoint { +public class SpringRabbitMQEndpoint extends DefaultEndpoint implements AsyncEndpoint, RemoteAddressAware { public static final String ARG_PREFIX = "arg."; public static final String CONSUMER_ARG_PREFIX = "consumer."; @@ -211,6 +212,32 @@ public class SpringRabbitMQEndpoint extends DefaultEndpoint implements AsyncEndp } } + @Override + public String getAddress() { + int port = 0; + String host = null; + if (getConnectionFactory() != null) { + host = getConnectionFactory().getHost(); + port = getConnectionFactory().getPort(); + } + if (host != null) { + return host + ":" + port; + } + return null; + } + + @Override + public Map<String, String> getAddressMetadata() { + String un = null; + if (getConnectionFactory() != null) { + un = getConnectionFactory().getUsername(); + } + if (un != null) { + return Map.of("username", un); + } + return null; + } + public String getExchangeName() { return exchangeName; } diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlEndpoint.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlEndpoint.java index 82b1c0b0d1f..e17dc38f0d0 100644 --- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlEndpoint.java +++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlEndpoint.java @@ -28,16 +28,18 @@ import javax.sql.DataSource; import org.apache.camel.Component; import org.apache.camel.spi.Metadata; +import org.apache.camel.spi.RemoteAddressAware; import org.apache.camel.spi.UriParam; import org.apache.camel.support.DefaultPollingEndpoint; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.RowMapperResultSetExtractor; +import org.springframework.jdbc.datasource.AbstractDriverBasedDataSource; /** * Base class for SQL endpoints. */ -public abstract class DefaultSqlEndpoint extends DefaultPollingEndpoint { +public abstract class DefaultSqlEndpoint extends DefaultPollingEndpoint implements RemoteAddressAware { private JdbcTemplate jdbcTemplate; @Metadata(autowired = true) @@ -136,6 +138,25 @@ public abstract class DefaultSqlEndpoint extends DefaultPollingEndpoint { super(endpointUri, component); } + @Override + public String getAddress() { + if (dataSource != null && dataSource instanceof AbstractDriverBasedDataSource ads) { + return ads.getUrl(); + } + return null; + } + + @Override + public Map<String, String> getAddressMetadata() { + if (dataSource != null && dataSource instanceof AbstractDriverBasedDataSource ads) { + String u = ads.getUsername(); + if (u != null) { + return Map.of("username", u); + } + } + return null; + } + public JdbcTemplate getJdbcTemplate() { return jdbcTemplate; } diff --git a/components/camel-stomp/src/main/java/org/apache/camel/component/stomp/StompEndpoint.java b/components/camel-stomp/src/main/java/org/apache/camel/component/stomp/StompEndpoint.java index 411e1a790e5..6364706a3db 100644 --- a/components/camel-stomp/src/main/java/org/apache/camel/component/stomp/StompEndpoint.java +++ b/components/camel-stomp/src/main/java/org/apache/camel/component/stomp/StompEndpoint.java @@ -33,6 +33,7 @@ import org.apache.camel.Producer; import org.apache.camel.spi.HeaderFilterStrategy; import org.apache.camel.spi.HeaderFilterStrategyAware; import org.apache.camel.spi.Metadata; +import org.apache.camel.spi.RemoteAddressAware; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; import org.apache.camel.spi.UriPath; @@ -59,7 +60,7 @@ import static org.fusesource.stomp.client.Constants.UNSUBSCRIBE; */ @UriEndpoint(firstVersion = "2.12.0", scheme = "stomp", title = "Stomp", syntax = "stomp:destination", category = { Category.MESSAGING }) -public class StompEndpoint extends DefaultEndpoint implements AsyncEndpoint, HeaderFilterStrategyAware { +public class StompEndpoint extends DefaultEndpoint implements AsyncEndpoint, HeaderFilterStrategyAware, RemoteAddressAware { private CallbackConnection connection; private Stomp stomp; @@ -96,6 +97,19 @@ public class StompEndpoint extends DefaultEndpoint implements AsyncEndpoint, Hea return consumer; } + @Override + public String getAddress() { + return configuration.getBrokerURL(); + } + + @Override + public Map<String, String> getAddressMetadata() { + if (configuration.getLogin() != null) { + return Map.of("username", configuration.getLogin()); + } + return null; + } + @Override protected void doStart() throws Exception { final Promise<CallbackConnection> promise = new Promise<>(); diff --git a/components/camel-tracing/src/main/java/org/apache/camel/tracing/TagConstants.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/TagConstants.java index c15a847e381..83fe3155735 100644 --- a/components/camel-tracing/src/main/java/org/apache/camel/tracing/TagConstants.java +++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/TagConstants.java @@ -24,6 +24,10 @@ public class TagConstants { // General attributes public static final String SERVER_ADDRESS = "server.address"; + // User attributes + public static final String USER_NAME = "user.name"; + public static final String USER_ID = "user.id"; + // HTTP attributes public static final String HTTP_STATUS = "http.status_code"; public static final String HTTP_METHOD = "http.method"; diff --git a/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AbstractSpanDecorator.java b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AbstractSpanDecorator.java index ab50fd3babf..a3c8db212e0 100644 --- a/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AbstractSpanDecorator.java +++ b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AbstractSpanDecorator.java @@ -20,6 +20,7 @@ import java.util.*; import org.apache.camel.Endpoint; import org.apache.camel.Exchange; +import org.apache.camel.spi.RemoteAddressAware; import org.apache.camel.tracing.ExtractAdapter; import org.apache.camel.tracing.InjectAdapter; import org.apache.camel.tracing.SpanAdapter; @@ -109,6 +110,24 @@ public abstract class AbstractSpanDecorator implements SpanDecorator { if (query != null) { span.setTag(TagConstants.URL_QUERY, query); } + + if (endpoint instanceof RemoteAddressAware raa) { + String adr = raa.getAddress(); + if (adr != null) { + span.setTag(TagConstants.SERVER_ADDRESS, adr); + } + Map map = raa.getAddressMetadata(); + if (map != null) { + String un = (String) map.get("username"); + if (un != null) { + span.setTag(TagConstants.USER_NAME, un); + } + String id = (String) map.get("clientId"); + if (id != null) { + span.setTag(TagConstants.USER_ID, id); + } + } + } } @Override @@ -146,4 +165,5 @@ public abstract class AbstractSpanDecorator implements SpanDecorator { // no encoding supported per default return new CamelHeadersInjectAdapter(map); } + } diff --git a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedEndpointMBean.java b/core/camel-api/src/main/java/org/apache/camel/spi/RemoteAddressAware.java similarity index 51% copy from core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedEndpointMBean.java copy to core/camel-api/src/main/java/org/apache/camel/spi/RemoteAddressAware.java index 048e98602d2..ee79407e835 100644 --- a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedEndpointMBean.java +++ b/core/camel-api/src/main/java/org/apache/camel/spi/RemoteAddressAware.java @@ -14,28 +14,30 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.api.management.mbean; +package org.apache.camel.spi; -import org.apache.camel.api.management.ManagedAttribute; - -public interface ManagedEndpointMBean { - - @ManagedAttribute(description = "Camel ID") - String getCamelId(); - - @ManagedAttribute(description = "Camel ManagementName") - String getCamelManagementName(); - - @ManagedAttribute(description = "Endpoint URI", mask = true) - String getEndpointUri(); - - @ManagedAttribute(description = "Endpoint Base URI (no query parameters)", mask = true) - String getEndpointBaseUri(); - - @ManagedAttribute(description = "Singleton") - boolean isSingleton(); - - @ManagedAttribute(description = "Endpoint State") - String getState(); +import java.util.Map; +/** + * Used for getting information about remote URL used for connecting to a remote system, + * such as from an {@link org.apache.camel.Endpoint} or {@link org.apache.camel.Component} + * that connects to messaging brokers, cloud systems, databases etc. + */ +public interface RemoteAddressAware { + + /** + * Gets the remote address such as URL or hostname + * + * @return the address or null if no address can be resolved + */ + String getAddress(); + + /** + * Optional additional metadata that is relevant to the remote address as key value pairs + * + * @return optional metadata or null if no data + */ + default Map<String, String> getAddressMetadata() { + return null; + } } diff --git a/core/camel-console/src/main/java/org/apache/camel/impl/console/EndpointDevConsole.java b/core/camel-console/src/main/java/org/apache/camel/impl/console/EndpointDevConsole.java index 71bc9b899ce..75b43b6c657 100644 --- a/core/camel-console/src/main/java/org/apache/camel/impl/console/EndpointDevConsole.java +++ b/core/camel-console/src/main/java/org/apache/camel/impl/console/EndpointDevConsole.java @@ -24,6 +24,7 @@ import java.util.Optional; import org.apache.camel.Endpoint; import org.apache.camel.spi.EndpointRegistry; +import org.apache.camel.spi.RemoteAddressAware; import org.apache.camel.spi.RuntimeEndpointRegistry; import org.apache.camel.spi.annotations.DevConsole; import org.apache.camel.support.console.AbstractDevConsole; @@ -74,6 +75,7 @@ public class EndpointDevConsole extends AbstractDevConsole { } @Override + @SuppressWarnings("unchecked") protected JsonObject doCallJson(Map<String, Object> options) { JsonObject root = new JsonObject(); @@ -96,6 +98,15 @@ public class EndpointDevConsole extends AbstractDevConsole { JsonObject jo = new JsonObject(); boolean stub = e.getComponent().getClass().getSimpleName().equals("StubComponent"); jo.put("uri", e.getEndpointUri()); + if (e instanceof RemoteAddressAware raa) { + JsonObject ro = new JsonObject(); + ro.put("address", raa.getAddress()); + var d = raa.getAddressMetadata(); + if (d != null) { + ro.putAll(d); + } + jo.put("remote", ro); + } jo.put("stub", stub); var stat = findStats(stats, e.getEndpointUri()); if (stat.isPresent()) { diff --git a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedEndpointMBean.java b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedEndpointMBean.java index 048e98602d2..eac9172353c 100644 --- a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedEndpointMBean.java +++ b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedEndpointMBean.java @@ -16,6 +16,8 @@ */ package org.apache.camel.api.management.mbean; +import java.util.Map; + import org.apache.camel.api.management.ManagedAttribute; public interface ManagedEndpointMBean { @@ -38,4 +40,10 @@ public interface ManagedEndpointMBean { @ManagedAttribute(description = "Endpoint State") String getState(); + @ManagedAttribute(description = "Remote Address this endpoint is connecting (only available for some components)") + String getRemoteAddress(); + + @ManagedAttribute(description = "Remote Address metadata this endpoint is connecting (only available for some components)") + Map<String, String> getRemoteAddressMetadata(); + } diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java index 45bb556663b..80f27eaf16b 100644 --- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java +++ b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java @@ -16,6 +16,8 @@ */ package org.apache.camel.management.mbean; +import java.util.Map; + import org.apache.camel.Endpoint; import org.apache.camel.ServiceStatus; import org.apache.camel.StatefulService; @@ -23,6 +25,7 @@ import org.apache.camel.api.management.ManagedInstance; import org.apache.camel.api.management.ManagedResource; import org.apache.camel.api.management.mbean.ManagedEndpointMBean; import org.apache.camel.spi.ManagementStrategy; +import org.apache.camel.spi.RemoteAddressAware; @ManagedResource(description = "Managed Endpoint") public class ManagedEndpoint implements ManagedInstance, ManagedEndpointMBean { @@ -77,6 +80,22 @@ public class ManagedEndpoint implements ManagedInstance, ManagedEndpointMBean { return ServiceStatus.Started.name(); } + @Override + public String getRemoteAddress() { + if (endpoint instanceof RemoteAddressAware raa) { + return raa.getAddress(); + } + return null; + } + + @Override + public Map<String, String> getRemoteAddressMetadata() { + if (endpoint instanceof RemoteAddressAware raa) { + return raa.getAddressMetadata(); + } + return null; + } + @Override public Endpoint getInstance() { return endpoint; diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/IronMQEndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/IronMQEndpointBuilderFactory.java index ee1fb989476..81dc886e7c2 100644 --- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/IronMQEndpointBuilderFactory.java +++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/IronMQEndpointBuilderFactory.java @@ -44,35 +44,6 @@ public interface IronMQEndpointBuilderFactory { default AdvancedIronMQEndpointConsumerBuilder advanced() { return (AdvancedIronMQEndpointConsumerBuilder) this; } - /** - * Reference to a io.iron.ironmq.Client in the Registry. - * - * The option is a: <code>io.iron.ironmq.Client</code> type. - * - * Group: common - * - * @param client the value to set - * @return the dsl builder - */ - default IronMQEndpointConsumerBuilder client(io.iron.ironmq.Client client) { - doSetProperty("client", client); - return this; - } - /** - * Reference to a io.iron.ironmq.Client in the Registry. - * - * The option will be converted to a <code>io.iron.ironmq.Client</code> - * type. - * - * Group: common - * - * @param client the value to set - * @return the dsl builder - */ - default IronMQEndpointConsumerBuilder client(String client) { - doSetProperty("client", client); - return this; - } /** * IronMq Cloud url. Urls for public clusters: * https://mq-aws-us-east-1-1.iron.io (US) and @@ -140,20 +111,6 @@ public interface IronMQEndpointBuilderFactory { doSetProperty("projectId", projectId); return this; } - /** - * IronMQ token. - * - * The option is a: <code>java.lang.String</code> type. - * - * Group: common - * - * @param token the value to set - * @return the dsl builder - */ - default IronMQEndpointConsumerBuilder token(String token) { - doSetProperty("token", token); - return this; - } /** * Should messages be deleted in one batch. This will limit the number * of api requests since messages are deleted in one request, instead of @@ -797,6 +754,20 @@ public interface IronMQEndpointBuilderFactory { doSetProperty("useFixedDelay", useFixedDelay); return this; } + /** + * IronMQ token. + * + * The option is a: <code>java.lang.String</code> type. + * + * Group: security + * + * @param token the value to set + * @return the dsl builder + */ + default IronMQEndpointConsumerBuilder token(String token) { + doSetProperty("token", token); + return this; + } } /** @@ -961,29 +932,17 @@ public interface IronMQEndpointBuilderFactory { doSetProperty("pollStrategy", pollStrategy); return this; } - } - - /** - * Builder for endpoint producers for the IronMQ component. - */ - public interface IronMQEndpointProducerBuilder - extends - EndpointProducerBuilder { - default AdvancedIronMQEndpointProducerBuilder advanced() { - return (AdvancedIronMQEndpointProducerBuilder) this; - } - /** * Reference to a io.iron.ironmq.Client in the Registry. * * The option is a: <code>io.iron.ironmq.Client</code> type. * - * Group: common + * Group: advanced * * @param client the value to set * @return the dsl builder */ - default IronMQEndpointProducerBuilder client(io.iron.ironmq.Client client) { + default AdvancedIronMQEndpointConsumerBuilder client(io.iron.ironmq.Client client) { doSetProperty("client", client); return this; } @@ -993,15 +952,27 @@ public interface IronMQEndpointBuilderFactory { * The option will be converted to a <code>io.iron.ironmq.Client</code> * type. * - * Group: common + * Group: advanced * * @param client the value to set * @return the dsl builder */ - default IronMQEndpointProducerBuilder client(String client) { + default AdvancedIronMQEndpointConsumerBuilder client(String client) { doSetProperty("client", client); return this; } + } + + /** + * Builder for endpoint producers for the IronMQ component. + */ + public interface IronMQEndpointProducerBuilder + extends + EndpointProducerBuilder { + default AdvancedIronMQEndpointProducerBuilder advanced() { + return (AdvancedIronMQEndpointProducerBuilder) this; + } + /** * IronMq Cloud url. Urls for public clusters: * https://mq-aws-us-east-1-1.iron.io (US) and @@ -1069,20 +1040,6 @@ public interface IronMQEndpointBuilderFactory { doSetProperty("projectId", projectId); return this; } - /** - * IronMQ token. - * - * The option is a: <code>java.lang.String</code> type. - * - * Group: common - * - * @param token the value to set - * @return the dsl builder - */ - default IronMQEndpointProducerBuilder token(String token) { - doSetProperty("token", token); - return this; - } /** * The item will not be available on the queue until this many seconds * have passed. Default is 0 seconds. @@ -1113,6 +1070,20 @@ public interface IronMQEndpointBuilderFactory { doSetProperty("visibilityDelay", visibilityDelay); return this; } + /** + * IronMQ token. + * + * The option is a: <code>java.lang.String</code> type. + * + * Group: security + * + * @param token the value to set + * @return the dsl builder + */ + default IronMQEndpointProducerBuilder token(String token) { + doSetProperty("token", token); + return this; + } } /** @@ -1169,30 +1140,17 @@ public interface IronMQEndpointBuilderFactory { doSetProperty("lazyStartProducer", lazyStartProducer); return this; } - } - - /** - * Builder for endpoint for the IronMQ component. - */ - public interface IronMQEndpointBuilder - extends - IronMQEndpointConsumerBuilder, - IronMQEndpointProducerBuilder { - default AdvancedIronMQEndpointBuilder advanced() { - return (AdvancedIronMQEndpointBuilder) this; - } - /** * Reference to a io.iron.ironmq.Client in the Registry. * * The option is a: <code>io.iron.ironmq.Client</code> type. * - * Group: common + * Group: advanced * * @param client the value to set * @return the dsl builder */ - default IronMQEndpointBuilder client(io.iron.ironmq.Client client) { + default AdvancedIronMQEndpointProducerBuilder client(io.iron.ironmq.Client client) { doSetProperty("client", client); return this; } @@ -1202,15 +1160,28 @@ public interface IronMQEndpointBuilderFactory { * The option will be converted to a <code>io.iron.ironmq.Client</code> * type. * - * Group: common + * Group: advanced * * @param client the value to set * @return the dsl builder */ - default IronMQEndpointBuilder client(String client) { + default AdvancedIronMQEndpointProducerBuilder client(String client) { doSetProperty("client", client); return this; } + } + + /** + * Builder for endpoint for the IronMQ component. + */ + public interface IronMQEndpointBuilder + extends + IronMQEndpointConsumerBuilder, + IronMQEndpointProducerBuilder { + default AdvancedIronMQEndpointBuilder advanced() { + return (AdvancedIronMQEndpointBuilder) this; + } + /** * IronMq Cloud url. Urls for public clusters: * https://mq-aws-us-east-1-1.iron.io (US) and @@ -1283,7 +1254,7 @@ public interface IronMQEndpointBuilderFactory { * * The option is a: <code>java.lang.String</code> type. * - * Group: common + * Group: security * * @param token the value to set * @return the dsl builder @@ -1305,6 +1276,35 @@ public interface IronMQEndpointBuilderFactory { return (IronMQEndpointBuilder) this; } + /** + * Reference to a io.iron.ironmq.Client in the Registry. + * + * The option is a: <code>io.iron.ironmq.Client</code> type. + * + * Group: advanced + * + * @param client the value to set + * @return the dsl builder + */ + default AdvancedIronMQEndpointBuilder client(io.iron.ironmq.Client client) { + doSetProperty("client", client); + return this; + } + /** + * Reference to a io.iron.ironmq.Client in the Registry. + * + * The option will be converted to a <code>io.iron.ironmq.Client</code> + * type. + * + * Group: advanced + * + * @param client the value to set + * @return the dsl builder + */ + default AdvancedIronMQEndpointBuilder client(String client) { + doSetProperty("client", client); + return this; + } } public interface IronMQBuilders { diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEndpoint.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEndpoint.java index 7fe9e947d19..893350ee544 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEndpoint.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEndpoint.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; +import java.util.StringJoiner; import com.github.freva.asciitable.AsciiTable; import com.github.freva.asciitable.Column; @@ -80,6 +81,10 @@ public class ListEndpoint extends ProcessWatchCommand { description = "List endpoint URI in full details") boolean wideUri; + @CommandLine.Option(names = { "--address" }, + description = "List address specific information (only possible for some components)") + boolean address; + public ListEndpoint(CamelJBangMain main) { super(main); } @@ -112,6 +117,10 @@ public class ListEndpoint extends ProcessWatchCommand { } row.pid = Long.toString(ph.pid()); row.endpoint = o.getString("uri"); + JsonObject ro = (JsonObject) o.get("remote"); + if (ro != null) { + row.address = ro; + } row.stub = o.getBooleanOrDefault("stub", false); row.direction = o.getString("direction"); row.total = o.getString("hits"); @@ -168,6 +177,9 @@ public class ListEndpoint extends ProcessWatchCommand { new Column().header("DIR").with(r -> r.direction), new Column().header("TOTAL").with(r -> r.total), new Column().header("STUB").dataAlign(HorizontalAlign.CENTER).with(r -> r.stub ? "x" : ""), + new Column().header("ADDRESS").visible(address).dataAlign(HorizontalAlign.LEFT) + .maxWidth(90, OverflowBehaviour.ELLIPSIS_RIGHT) + .with(this::getAddress), new Column().header("URI").visible(!wideUri).dataAlign(HorizontalAlign.LEFT) .maxWidth(90, OverflowBehaviour.ELLIPSIS_RIGHT) .with(this::getUri), @@ -187,6 +199,23 @@ public class ListEndpoint extends ProcessWatchCommand { return u; } + private String getAddress(Row r) { + String a = ""; + if (r.address != null) { + a = r.address.getString("address"); + if (r.address.size() > 1) { + StringJoiner sj = new StringJoiner(" "); + r.address.forEach((k, v) -> { + if (!"address".equals(k)) { + sj.add(k + "=" + v); + } + }); + a = a + " (" + sj + ")"; + } + } + return a; + } + protected int sortRow(Row o1, Row o2) { String s = sort; int negate = 1; @@ -217,6 +246,7 @@ public class ListEndpoint extends ProcessWatchCommand { String direction; String total; boolean stub; + JsonObject address; } } diff --git a/dsl/camel-kotlin-api/src/generated/kotlin/org/apache/camel/kotlin/components/IronmqUriDsl.kt b/dsl/camel-kotlin-api/src/generated/kotlin/org/apache/camel/kotlin/components/IronmqUriDsl.kt index aac60be7a89..cccb5b9b66a 100644 --- a/dsl/camel-kotlin-api/src/generated/kotlin/org/apache/camel/kotlin/components/IronmqUriDsl.kt +++ b/dsl/camel-kotlin-api/src/generated/kotlin/org/apache/camel/kotlin/components/IronmqUriDsl.kt @@ -52,13 +52,6 @@ public class IronmqUriDsl( it.url("$queueName") } - /** - * Reference to a io.iron.ironmq.Client in the Registry. - */ - public fun client(client: String) { - it.property("client", client) - } - /** * IronMq Cloud url. Urls for public clusters: https://mq-aws-us-east-1-1.iron.io (US) and * https://mq-aws-eu-west-1-1.iron.io (EU) @@ -92,13 +85,6 @@ public class IronmqUriDsl( it.property("projectId", projectId) } - /** - * IronMQ token - */ - public fun token(token: String) { - it.property("token", token) - } - /** * Should messages be deleted in one batch. This will limit the number of api requests since * messages are deleted in one request, instead of one pr. exchange. If enabled care should be taken @@ -286,6 +272,13 @@ public class IronmqUriDsl( it.property("lazyStartProducer", lazyStartProducer.toString()) } + /** + * Reference to a io.iron.ironmq.Client in the Registry. + */ + public fun client(client: String) { + it.property("client", client) + } + /** * The number of subsequent error polls (failed due some error) that should happen before the * backoffMultipler should kick-in. @@ -466,4 +459,11 @@ public class IronmqUriDsl( public fun useFixedDelay(useFixedDelay: Boolean) { it.property("useFixedDelay", useFixedDelay.toString()) } + + /** + * IronMQ token + */ + public fun token(token: String) { + it.property("token", token) + } }