You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2024/02/09 16:01:13 UTC

(camel) branch main updated: CAMEL-20400: Support for Knative SinkBinding

This is an automated email from the ASF dual-hosted git repository.

lburgazzoli pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 2809422a922 CAMEL-20400: Support for Knative SinkBinding
2809422a922 is described below

commit 2809422a92234c0daa97f2f745cc8bc2bbf31947
Author: Luca Burgazzoli <lb...@gmail.com>
AuthorDate: Fri Feb 9 14:23:27 2024 +0100

    CAMEL-20400: Support for Knative SinkBinding
---
 .../apache/camel/catalog/components/knative.json   |  44 +++----
 .../knative/spi/KnativeSinkBindingConfigurer.java  |  67 +++++++++++
 ....camel.component.knative.spi.KnativeSinkBinding |   2 +
 .../component/knative/spi/KnativeResource.java     |   2 +-
 .../component/knative/spi/KnativeSinkBinding.java  |  69 +++++++++++
 .../component/knative/spi/KnativeSupport.java      |  40 -------
 .../camel-knative/camel-knative-component/pom.xml  |   5 +
 .../knative/KnativeComponentConfigurer.java        |  18 +++
 .../knative/KnativeEndpointConfigurer.java         |   6 +
 .../knative/KnativeEndpointUriFactory.java         |   3 +-
 .../apache/camel/component/knative/knative.json    |  44 +++----
 .../camel/component/knative/KnativeComponent.java  |  23 +++-
 .../component/knative/KnativeConfiguration.java    |  20 +++-
 .../camel/component/knative/KnativeProducer.java   |  64 +++++++++-
 .../camel/component/knative/KnativeSupport.java    |  70 +++++++++++
 .../component/knative/KnativeSinkBindingTest.java  | 130 +++++++++++++++++++++
 .../knative/http/KnativeHttpConsumer.java          |   4 +-
 .../dsl/KnativeComponentBuilderFactory.java        |  55 +++++++++
 .../dsl/KnativeEndpointBuilderFactory.java         |  93 +++++++++++++++
 19 files changed, 665 insertions(+), 94 deletions(-)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/knative.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/knative.json
index 54d3bb7fe8a..a3a541e2318 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/knative.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/knative.json
@@ -32,16 +32,19 @@
     "environmentPath": { "index": 6, "kind": "property", "displayName": "Environment Path", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The path ot the environment definition" },
     "filters": { "index": 7, "kind": "property", "displayName": "Filters", "group": "common", "label": "", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.String>", "prefix": "filter.", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "Set the filters." },
     "producerFactory": { "index": 8, "kind": "property", "displayName": "Producer Factory", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.knative.spi.KnativeProducerFactory", "deprecated": false, "autowired": false, "secret": false, "description": "The protocol producer factory." },
-    "transportOptions": { "index": 9, "kind": "property", "displayName": "Transport Options", "group": "common", "label": "", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix": "transport.", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "Set the transport options." },
-    "typeId": { "index": 10, "kind": "property", "displayName": "Type Id", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The name of the service to lookup from the KnativeEnvironment." },
-    "bridgeErrorHandler": { "index": 11, "kind": "property", "displayName": "Bridge Error Handler", "group": "consumer", "label": "consumer", "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 messages, or the lik [...]
-    "replyWithCloudEvent": { "index": 12, "kind": "property", "displayName": "Reply With Cloud Event", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "Transforms the reply into a cloud event that will be processed by the [...]
-    "reply": { "index": 13, "kind": "property", "displayName": "Reply", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "true", "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "If the consumer should construct a full reply to knative request." },
-    "lazyStartProducer": { "index": 14, "kind": "property", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fai [...]
-    "apiVersion": { "index": 15, "kind": "property", "displayName": "Api Version", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The version of the k8s resource referenced by the endpoint." },
-    "autowiredEnabled": { "index": 16, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching  [...]
-    "kind": { "index": 17, "kind": "property", "displayName": "Kind", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The type of the k8s resource referenced by the endpoint." },
-    "name": { "index": 18, "kind": "property", "displayName": "Name", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The name of the k8s resource referenced by the endpoint." }
+    "sinkBinding": { "index": 9, "kind": "property", "displayName": "Sink Binding", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.knative.spi.KnativeSinkBinding", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The SinkBinding configuration." },
+    "transportOptions": { "index": 10, "kind": "property", "displayName": "Transport Options", "group": "common", "label": "", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix": "transport.", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "Set the transport options." },
+    "typeId": { "index": 11, "kind": "property", "displayName": "Type Id", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The name of the service to lookup from the KnativeEnvironment." },
+    "bridgeErrorHandler": { "index": 12, "kind": "property", "displayName": "Bridge Error Handler", "group": "consumer", "label": "consumer", "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 messages, or the lik [...]
+    "replyWithCloudEvent": { "index": 13, "kind": "property", "displayName": "Reply With Cloud Event", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "Transforms the reply into a cloud event that will be processed by the [...]
+    "reply": { "index": 14, "kind": "property", "displayName": "Reply", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "true", "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "If the consumer should construct a full reply to knative request." },
+    "lazyStartProducer": { "index": 15, "kind": "property", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fai [...]
+    "apiVersion": { "index": 16, "kind": "property", "displayName": "Api Version", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The version of the k8s resource referenced by the endpoint." },
+    "autowiredEnabled": { "index": 17, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching  [...]
+    "kind": { "index": 18, "kind": "property", "displayName": "Kind", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The type of the k8s resource referenced by the endpoint." },
+    "name": { "index": 19, "kind": "property", "displayName": "Name", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The name of the k8s resource referenced by the endpoint." },
+    "healthCheckConsumerEnabled": { "index": 20, "kind": "property", "displayName": "Health Check Consumer Enabled", "group": "health", "label": "health", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Used for enabling or disabling all consumer based health checks from this component" },
+    "healthCheckProducerEnabled": { "index": 21, "kind": "property", "displayName": "Health Check Producer Enabled", "group": "health", "label": "health", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Used for enabling or disabling all producer based health checks from this component. Notice: Camel has by default disabled all producer based health-checks. You can turn on produce [...]
   },
   "properties": {
     "type": { "index": 0, "kind": "path", "displayName": "Type", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.knative.spi.Knative.Type", "enum": [ "endpoint", "channel", "event" ], "deprecated": false, "autowired": false, "secret": false, "description": "The Knative resource type" },
@@ -51,15 +54,16 @@
     "cloudEventsType": { "index": 4, "kind": "parameter", "displayName": "Cloud Events Type", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "org.apache.camel.event", "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "Set the event-type information of the produced events." },
     "environment": { "index": 5, "kind": "parameter", "displayName": "Environment", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.knative.spi.KnativeEnvironment", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The environment" },
     "filters": { "index": 6, "kind": "parameter", "displayName": "Filters", "group": "common", "label": "", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.String>", "prefix": "filter.", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "Set the filters." },
-    "transportOptions": { "index": 7, "kind": "parameter", "displayName": "Transport Options", "group": "common", "label": "", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix": "transport.", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "Set the transport options." },
-    "replyWithCloudEvent": { "index": 8, "kind": "parameter", "displayName": "Reply With Cloud Event", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "Transforms the reply into a cloud event that will be processed by the [...]
-    "bridgeErrorHandler": { "index": 9, "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": 10, "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": 11, "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." },
-    "reply": { "index": 12, "kind": "parameter", "displayName": "Reply", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "true", "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "If the consumer should construct a full reply to knative request." },
-    "lazyStartProducer": { "index": 13, "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 [...]
-    "apiVersion": { "index": 14, "kind": "parameter", "displayName": "Api Version", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The version of the k8s resource referenced by the endpoint." },
-    "kind": { "index": 15, "kind": "parameter", "displayName": "Kind", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The type of the k8s resource referenced by the endpoint." },
-    "name": { "index": 16, "kind": "parameter", "displayName": "Name", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The name of the k8s resource referenced by the endpoint." }
+    "sinkBinding": { "index": 7, "kind": "parameter", "displayName": "Sink Binding", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.knative.spi.KnativeSinkBinding", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The SinkBinding configuration." },
+    "transportOptions": { "index": 8, "kind": "parameter", "displayName": "Transport Options", "group": "common", "label": "", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix": "transport.", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "Set the transport options." },
+    "replyWithCloudEvent": { "index": 9, "kind": "parameter", "displayName": "Reply With Cloud Event", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "Transforms the reply into a cloud event that will be processed by the [...]
+    "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." },
+    "reply": { "index": 13, "kind": "parameter", "displayName": "Reply", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "true", "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "If the consumer should construct a full reply to knative request." },
+    "lazyStartProducer": { "index": 14, "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 [...]
+    "apiVersion": { "index": 15, "kind": "parameter", "displayName": "Api Version", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The version of the k8s resource referenced by the endpoint." },
+    "kind": { "index": 16, "kind": "parameter", "displayName": "Kind", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The type of the k8s resource referenced by the endpoint." },
+    "name": { "index": 17, "kind": "parameter", "displayName": "Name", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The name of the k8s resource referenced by the endpoint." }
   }
 }
diff --git a/components/camel-knative/camel-knative-api/src/generated/java/org/apache/camel/component/knative/spi/KnativeSinkBindingConfigurer.java b/components/camel-knative/camel-knative-api/src/generated/java/org/apache/camel/component/knative/spi/KnativeSinkBindingConfigurer.java
new file mode 100644
index 00000000000..2ca1ea0adec
--- /dev/null
+++ b/components/camel-knative/camel-knative-api/src/generated/java/org/apache/camel/component/knative/spi/KnativeSinkBindingConfigurer.java
@@ -0,0 +1,67 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.component.knative.spi;
+
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.ExtendedPropertyConfigurerGetter;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.spi.ConfigurerStrategy;
+import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.util.CaseInsensitiveMap;
+import org.apache.camel.component.knative.spi.KnativeSinkBinding;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+public class KnativeSinkBindingConfigurer extends org.apache.camel.support.component.PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
+
+    @Override
+    public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
+        org.apache.camel.component.knative.spi.KnativeSinkBinding target = (org.apache.camel.component.knative.spi.KnativeSinkBinding) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "name":
+        case "Name": target.setName(property(camelContext, java.lang.String.class, value)); return true;
+        case "objectapiversion":
+        case "ObjectApiVersion": target.setObjectApiVersion(property(camelContext, java.lang.String.class, value)); return true;
+        case "objectkind":
+        case "ObjectKind": target.setObjectKind(property(camelContext, java.lang.String.class, value)); return true;
+        case "type":
+        case "Type": target.setType(property(camelContext, org.apache.camel.component.knative.spi.Knative.Type.class, value)); return true;
+        default: return false;
+        }
+    }
+
+    @Override
+    public Class<?> getOptionType(String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "name":
+        case "Name": return java.lang.String.class;
+        case "objectapiversion":
+        case "ObjectApiVersion": return java.lang.String.class;
+        case "objectkind":
+        case "ObjectKind": return java.lang.String.class;
+        case "type":
+        case "Type": return org.apache.camel.component.knative.spi.Knative.Type.class;
+        default: return null;
+        }
+    }
+
+    @Override
+    public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+        org.apache.camel.component.knative.spi.KnativeSinkBinding target = (org.apache.camel.component.knative.spi.KnativeSinkBinding) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "name":
+        case "Name": return target.getName();
+        case "objectapiversion":
+        case "ObjectApiVersion": return target.getObjectApiVersion();
+        case "objectkind":
+        case "ObjectKind": return target.getObjectKind();
+        case "type":
+        case "Type": return target.getType();
+        default: return null;
+        }
+    }
+}
+
diff --git a/components/camel-knative/camel-knative-api/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.knative.spi.KnativeSinkBinding b/components/camel-knative/camel-knative-api/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.knative.spi.KnativeSinkBinding
new file mode 100644
index 00000000000..59523134747
--- /dev/null
+++ b/components/camel-knative/camel-knative-api/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.component.knative.spi.KnativeSinkBinding
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.knative.spi.KnativeSinkBindingConfigurer
diff --git a/components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeResource.java b/components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeResource.java
index 2c467d42e2b..dd0f03eb036 100644
--- a/components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeResource.java
+++ b/components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeResource.java
@@ -26,7 +26,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import org.apache.camel.spi.Configurer;
 
 @Configurer
-public final class KnativeResource {
+public class KnativeResource {
     private String name;
     private String url;
     private Knative.Type type;
diff --git a/components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeSinkBinding.java b/components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeSinkBinding.java
new file mode 100644
index 00000000000..1ef8b3729a5
--- /dev/null
+++ b/components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeSinkBinding.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.knative.spi;
+
+import org.apache.camel.spi.Configurer;
+
+@Configurer
+public class KnativeSinkBinding {
+    private String name;
+    private Knative.Type type;
+    private String objectKind;
+    private String objectApiVersion;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Knative.Type getType() {
+        return type;
+    }
+
+    public void setType(Knative.Type type) {
+        this.type = type;
+    }
+
+    public String getObjectKind() {
+        return objectKind;
+    }
+
+    public void setObjectKind(String objectKind) {
+        this.objectKind = objectKind;
+    }
+
+    public String getObjectApiVersion() {
+        return objectApiVersion;
+    }
+
+    public void setObjectApiVersion(String objectApiVersion) {
+        this.objectApiVersion = objectApiVersion;
+    }
+
+    @Override
+    public String toString() {
+        return "KnativeSinkBinding{" +
+               "name='" + name + '\'' +
+               ", type=" + type +
+               ", objectKind='" + objectKind + '\'' +
+               ", objectApiVersion='" + objectApiVersion + '\'' +
+               '}';
+    }
+}
diff --git a/components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeSupport.java b/components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeSupport.java
deleted file mode 100644
index 363ecd2fe4d..00000000000
--- a/components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeSupport.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.component.knative.spi;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public final class KnativeSupport {
-    private KnativeSupport() {
-    }
-
-    @SafeVarargs
-    public static <K, V> Map<K, V> mergeMaps(Map<K, V> map, Map<K, V>... maps) {
-        Map<K, V> answer = new HashMap<>();
-
-        if (map != null) {
-            answer.putAll(map);
-        }
-
-        for (Map<K, V> m : maps) {
-            answer.putAll(m);
-        }
-
-        return answer;
-    }
-}
diff --git a/components/camel-knative/camel-knative-component/pom.xml b/components/camel-knative/camel-knative-component/pom.xml
index 9802780e787..c452090d334 100644
--- a/components/camel-knative/camel-knative-component/pom.xml
+++ b/components/camel-knative/camel-knative-component/pom.xml
@@ -38,6 +38,11 @@
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-support</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-health</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-knative-api</artifactId>
diff --git a/components/camel-knative/camel-knative-component/src/generated/java/org/apache/camel/component/knative/KnativeComponentConfigurer.java b/components/camel-knative/camel-knative-component/src/generated/java/org/apache/camel/component/knative/KnativeComponentConfigurer.java
index 7834929c038..d6151c09566 100644
--- a/components/camel-knative/camel-knative-component/src/generated/java/org/apache/camel/component/knative/KnativeComponentConfigurer.java
+++ b/components/camel-knative/camel-knative-component/src/generated/java/org/apache/camel/component/knative/KnativeComponentConfigurer.java
@@ -47,6 +47,10 @@ public class KnativeComponentConfigurer extends PropertyConfigurerSupport implem
         case "environmentpath":
         case "environmentPath": target.setEnvironmentPath(property(camelContext, java.lang.String.class, value)); return true;
         case "filters": getOrCreateConfiguration(target).setFilters(property(camelContext, java.util.Map.class, value)); return true;
+        case "healthcheckconsumerenabled":
+        case "healthCheckConsumerEnabled": target.setHealthCheckConsumerEnabled(property(camelContext, boolean.class, value)); return true;
+        case "healthcheckproducerenabled":
+        case "healthCheckProducerEnabled": target.setHealthCheckProducerEnabled(property(camelContext, boolean.class, value)); return true;
         case "kind": getOrCreateConfiguration(target).setKind(property(camelContext, java.lang.String.class, value)); return true;
         case "lazystartproducer":
         case "lazyStartProducer": target.setLazyStartProducer(property(camelContext, boolean.class, value)); return true;
@@ -56,6 +60,8 @@ public class KnativeComponentConfigurer extends PropertyConfigurerSupport implem
         case "reply": getOrCreateConfiguration(target).setReply(property(camelContext, java.lang.Boolean.class, value)); return true;
         case "replywithcloudevent":
         case "replyWithCloudEvent": getOrCreateConfiguration(target).setReplyWithCloudEvent(property(camelContext, boolean.class, value)); return true;
+        case "sinkbinding":
+        case "sinkBinding": getOrCreateConfiguration(target).setSinkBinding(property(camelContext, org.apache.camel.component.knative.spi.KnativeSinkBinding.class, value)); return true;
         case "transportoptions":
         case "transportOptions": getOrCreateConfiguration(target).setTransportOptions(property(camelContext, java.util.Map.class, value)); return true;
         case "typeid":
@@ -86,6 +92,10 @@ public class KnativeComponentConfigurer extends PropertyConfigurerSupport implem
         case "environmentpath":
         case "environmentPath": return java.lang.String.class;
         case "filters": return java.util.Map.class;
+        case "healthcheckconsumerenabled":
+        case "healthCheckConsumerEnabled": return boolean.class;
+        case "healthcheckproducerenabled":
+        case "healthCheckProducerEnabled": return boolean.class;
         case "kind": return java.lang.String.class;
         case "lazystartproducer":
         case "lazyStartProducer": return boolean.class;
@@ -95,6 +105,8 @@ public class KnativeComponentConfigurer extends PropertyConfigurerSupport implem
         case "reply": return java.lang.Boolean.class;
         case "replywithcloudevent":
         case "replyWithCloudEvent": return boolean.class;
+        case "sinkbinding":
+        case "sinkBinding": return org.apache.camel.component.knative.spi.KnativeSinkBinding.class;
         case "transportoptions":
         case "transportOptions": return java.util.Map.class;
         case "typeid":
@@ -126,6 +138,10 @@ public class KnativeComponentConfigurer extends PropertyConfigurerSupport implem
         case "environmentpath":
         case "environmentPath": return target.getEnvironmentPath();
         case "filters": return getOrCreateConfiguration(target).getFilters();
+        case "healthcheckconsumerenabled":
+        case "healthCheckConsumerEnabled": return target.isHealthCheckConsumerEnabled();
+        case "healthcheckproducerenabled":
+        case "healthCheckProducerEnabled": return target.isHealthCheckProducerEnabled();
         case "kind": return getOrCreateConfiguration(target).getKind();
         case "lazystartproducer":
         case "lazyStartProducer": return target.isLazyStartProducer();
@@ -135,6 +151,8 @@ public class KnativeComponentConfigurer extends PropertyConfigurerSupport implem
         case "reply": return getOrCreateConfiguration(target).getReply();
         case "replywithcloudevent":
         case "replyWithCloudEvent": return getOrCreateConfiguration(target).isReplyWithCloudEvent();
+        case "sinkbinding":
+        case "sinkBinding": return getOrCreateConfiguration(target).getSinkBinding();
         case "transportoptions":
         case "transportOptions": return getOrCreateConfiguration(target).getTransportOptions();
         case "typeid":
diff --git a/components/camel-knative/camel-knative-component/src/generated/java/org/apache/camel/component/knative/KnativeEndpointConfigurer.java b/components/camel-knative/camel-knative-component/src/generated/java/org/apache/camel/component/knative/KnativeEndpointConfigurer.java
index 14d01846a3d..7a95af633cf 100644
--- a/components/camel-knative/camel-knative-component/src/generated/java/org/apache/camel/component/knative/KnativeEndpointConfigurer.java
+++ b/components/camel-knative/camel-knative-component/src/generated/java/org/apache/camel/component/knative/KnativeEndpointConfigurer.java
@@ -44,6 +44,8 @@ public class KnativeEndpointConfigurer extends PropertyConfigurerSupport impleme
         case "reply": target.getConfiguration().setReply(property(camelContext, java.lang.Boolean.class, value)); return true;
         case "replywithcloudevent":
         case "replyWithCloudEvent": target.getConfiguration().setReplyWithCloudEvent(property(camelContext, boolean.class, value)); return true;
+        case "sinkbinding":
+        case "sinkBinding": target.getConfiguration().setSinkBinding(property(camelContext, org.apache.camel.component.knative.spi.KnativeSinkBinding.class, value)); return true;
         case "transportoptions":
         case "transportOptions": target.getConfiguration().setTransportOptions(property(camelContext, java.util.Map.class, value)); return true;
         default: return false;
@@ -76,6 +78,8 @@ public class KnativeEndpointConfigurer extends PropertyConfigurerSupport impleme
         case "reply": return java.lang.Boolean.class;
         case "replywithcloudevent":
         case "replyWithCloudEvent": return boolean.class;
+        case "sinkbinding":
+        case "sinkBinding": return org.apache.camel.component.knative.spi.KnativeSinkBinding.class;
         case "transportoptions":
         case "transportOptions": return java.util.Map.class;
         default: return null;
@@ -109,6 +113,8 @@ public class KnativeEndpointConfigurer extends PropertyConfigurerSupport impleme
         case "reply": return target.getConfiguration().getReply();
         case "replywithcloudevent":
         case "replyWithCloudEvent": return target.getConfiguration().isReplyWithCloudEvent();
+        case "sinkbinding":
+        case "sinkBinding": return target.getConfiguration().getSinkBinding();
         case "transportoptions":
         case "transportOptions": return target.getConfiguration().getTransportOptions();
         default: return null;
diff --git a/components/camel-knative/camel-knative-component/src/generated/java/org/apache/camel/component/knative/KnativeEndpointUriFactory.java b/components/camel-knative/camel-knative-component/src/generated/java/org/apache/camel/component/knative/KnativeEndpointUriFactory.java
index ec113ef3f6f..f087e7ca0b3 100644
--- a/components/camel-knative/camel-knative-component/src/generated/java/org/apache/camel/component/knative/KnativeEndpointUriFactory.java
+++ b/components/camel-knative/camel-knative-component/src/generated/java/org/apache/camel/component/knative/KnativeEndpointUriFactory.java
@@ -21,7 +21,7 @@ public class KnativeEndpointUriFactory extends org.apache.camel.support.componen
     private static final Set<String> SECRET_PROPERTY_NAMES;
     private static final Set<String> MULTI_VALUE_PREFIXES;
     static {
-        Set<String> props = new HashSet<>(17);
+        Set<String> props = new HashSet<>(18);
         props.add("apiVersion");
         props.add("bridgeErrorHandler");
         props.add("ceOverride");
@@ -36,6 +36,7 @@ public class KnativeEndpointUriFactory extends org.apache.camel.support.componen
         props.add("name");
         props.add("reply");
         props.add("replyWithCloudEvent");
+        props.add("sinkBinding");
         props.add("transportOptions");
         props.add("type");
         props.add("typeId");
diff --git a/components/camel-knative/camel-knative-component/src/generated/resources/org/apache/camel/component/knative/knative.json b/components/camel-knative/camel-knative-component/src/generated/resources/org/apache/camel/component/knative/knative.json
index 54d3bb7fe8a..a3a541e2318 100644
--- a/components/camel-knative/camel-knative-component/src/generated/resources/org/apache/camel/component/knative/knative.json
+++ b/components/camel-knative/camel-knative-component/src/generated/resources/org/apache/camel/component/knative/knative.json
@@ -32,16 +32,19 @@
     "environmentPath": { "index": 6, "kind": "property", "displayName": "Environment Path", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The path ot the environment definition" },
     "filters": { "index": 7, "kind": "property", "displayName": "Filters", "group": "common", "label": "", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.String>", "prefix": "filter.", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "Set the filters." },
     "producerFactory": { "index": 8, "kind": "property", "displayName": "Producer Factory", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.knative.spi.KnativeProducerFactory", "deprecated": false, "autowired": false, "secret": false, "description": "The protocol producer factory." },
-    "transportOptions": { "index": 9, "kind": "property", "displayName": "Transport Options", "group": "common", "label": "", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix": "transport.", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "Set the transport options." },
-    "typeId": { "index": 10, "kind": "property", "displayName": "Type Id", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The name of the service to lookup from the KnativeEnvironment." },
-    "bridgeErrorHandler": { "index": 11, "kind": "property", "displayName": "Bridge Error Handler", "group": "consumer", "label": "consumer", "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 messages, or the lik [...]
-    "replyWithCloudEvent": { "index": 12, "kind": "property", "displayName": "Reply With Cloud Event", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "Transforms the reply into a cloud event that will be processed by the [...]
-    "reply": { "index": 13, "kind": "property", "displayName": "Reply", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "true", "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "If the consumer should construct a full reply to knative request." },
-    "lazyStartProducer": { "index": 14, "kind": "property", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fai [...]
-    "apiVersion": { "index": 15, "kind": "property", "displayName": "Api Version", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The version of the k8s resource referenced by the endpoint." },
-    "autowiredEnabled": { "index": 16, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching  [...]
-    "kind": { "index": 17, "kind": "property", "displayName": "Kind", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The type of the k8s resource referenced by the endpoint." },
-    "name": { "index": 18, "kind": "property", "displayName": "Name", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The name of the k8s resource referenced by the endpoint." }
+    "sinkBinding": { "index": 9, "kind": "property", "displayName": "Sink Binding", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.knative.spi.KnativeSinkBinding", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The SinkBinding configuration." },
+    "transportOptions": { "index": 10, "kind": "property", "displayName": "Transport Options", "group": "common", "label": "", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix": "transport.", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "Set the transport options." },
+    "typeId": { "index": 11, "kind": "property", "displayName": "Type Id", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The name of the service to lookup from the KnativeEnvironment." },
+    "bridgeErrorHandler": { "index": 12, "kind": "property", "displayName": "Bridge Error Handler", "group": "consumer", "label": "consumer", "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 messages, or the lik [...]
+    "replyWithCloudEvent": { "index": 13, "kind": "property", "displayName": "Reply With Cloud Event", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "Transforms the reply into a cloud event that will be processed by the [...]
+    "reply": { "index": 14, "kind": "property", "displayName": "Reply", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "true", "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "If the consumer should construct a full reply to knative request." },
+    "lazyStartProducer": { "index": 15, "kind": "property", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fai [...]
+    "apiVersion": { "index": 16, "kind": "property", "displayName": "Api Version", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The version of the k8s resource referenced by the endpoint." },
+    "autowiredEnabled": { "index": 17, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching  [...]
+    "kind": { "index": 18, "kind": "property", "displayName": "Kind", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The type of the k8s resource referenced by the endpoint." },
+    "name": { "index": 19, "kind": "property", "displayName": "Name", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The name of the k8s resource referenced by the endpoint." },
+    "healthCheckConsumerEnabled": { "index": 20, "kind": "property", "displayName": "Health Check Consumer Enabled", "group": "health", "label": "health", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Used for enabling or disabling all consumer based health checks from this component" },
+    "healthCheckProducerEnabled": { "index": 21, "kind": "property", "displayName": "Health Check Producer Enabled", "group": "health", "label": "health", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Used for enabling or disabling all producer based health checks from this component. Notice: Camel has by default disabled all producer based health-checks. You can turn on produce [...]
   },
   "properties": {
     "type": { "index": 0, "kind": "path", "displayName": "Type", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.knative.spi.Knative.Type", "enum": [ "endpoint", "channel", "event" ], "deprecated": false, "autowired": false, "secret": false, "description": "The Knative resource type" },
@@ -51,15 +54,16 @@
     "cloudEventsType": { "index": 4, "kind": "parameter", "displayName": "Cloud Events Type", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "org.apache.camel.event", "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "Set the event-type information of the produced events." },
     "environment": { "index": 5, "kind": "parameter", "displayName": "Environment", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.knative.spi.KnativeEnvironment", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The environment" },
     "filters": { "index": 6, "kind": "parameter", "displayName": "Filters", "group": "common", "label": "", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.String>", "prefix": "filter.", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "Set the filters." },
-    "transportOptions": { "index": 7, "kind": "parameter", "displayName": "Transport Options", "group": "common", "label": "", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix": "transport.", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "Set the transport options." },
-    "replyWithCloudEvent": { "index": 8, "kind": "parameter", "displayName": "Reply With Cloud Event", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "Transforms the reply into a cloud event that will be processed by the [...]
-    "bridgeErrorHandler": { "index": 9, "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": 10, "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": 11, "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." },
-    "reply": { "index": 12, "kind": "parameter", "displayName": "Reply", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "true", "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "If the consumer should construct a full reply to knative request." },
-    "lazyStartProducer": { "index": 13, "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 [...]
-    "apiVersion": { "index": 14, "kind": "parameter", "displayName": "Api Version", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The version of the k8s resource referenced by the endpoint." },
-    "kind": { "index": 15, "kind": "parameter", "displayName": "Kind", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The type of the k8s resource referenced by the endpoint." },
-    "name": { "index": 16, "kind": "parameter", "displayName": "Name", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The name of the k8s resource referenced by the endpoint." }
+    "sinkBinding": { "index": 7, "kind": "parameter", "displayName": "Sink Binding", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.knative.spi.KnativeSinkBinding", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The SinkBinding configuration." },
+    "transportOptions": { "index": 8, "kind": "parameter", "displayName": "Transport Options", "group": "common", "label": "", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix": "transport.", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "Set the transport options." },
+    "replyWithCloudEvent": { "index": 9, "kind": "parameter", "displayName": "Reply With Cloud Event", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "Transforms the reply into a cloud event that will be processed by the [...]
+    "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." },
+    "reply": { "index": 13, "kind": "parameter", "displayName": "Reply", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "true", "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "If the consumer should construct a full reply to knative request." },
+    "lazyStartProducer": { "index": 14, "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 [...]
+    "apiVersion": { "index": 15, "kind": "parameter", "displayName": "Api Version", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The version of the k8s resource referenced by the endpoint." },
+    "kind": { "index": 16, "kind": "parameter", "displayName": "Kind", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The type of the k8s resource referenced by the endpoint." },
+    "name": { "index": 17, "kind": "parameter", "displayName": "Name", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The name of the k8s resource referenced by the endpoint." }
   }
 }
diff --git a/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeComponent.java b/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeComponent.java
index e82c2a07041..862cfa6a18e 100644
--- a/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeComponent.java
+++ b/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeComponent.java
@@ -26,10 +26,11 @@ import org.apache.camel.component.knative.spi.Knative;
 import org.apache.camel.component.knative.spi.KnativeConsumerFactory;
 import org.apache.camel.component.knative.spi.KnativeEnvironment;
 import org.apache.camel.component.knative.spi.KnativeProducerFactory;
+import org.apache.camel.component.knative.spi.KnativeResource;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.support.CamelContextHelper;
-import org.apache.camel.support.DefaultComponent;
+import org.apache.camel.support.HealthCheckComponent;
 import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.PropertiesHelper;
@@ -38,7 +39,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 @Component(KnativeConstants.SCHEME)
-public class KnativeComponent extends DefaultComponent {
+public class KnativeComponent extends HealthCheckComponent {
     private static final Logger LOGGER = LoggerFactory.getLogger(KnativeComponent.class);
 
     @Metadata
@@ -213,7 +214,7 @@ public class KnativeComponent extends DefaultComponent {
         }
     }
 
-    @SuppressWarnings("unchecked")
+    @SuppressWarnings({ "unchecked", "rawtypes" })
     @Override
     protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
         if (ObjectHelper.isEmpty(remaining)) {
@@ -270,11 +271,21 @@ public class KnativeComponent extends DefaultComponent {
                 env = CamelContextHelper.findSingleByType(getCamelContext(), KnativeEnvironment.class);
             }
 
-            if (env == null) {
-                throw new IllegalStateException("Cannot load Knative configuration from file or env variable");
+            conf.setEnvironment(env);
+        }
+
+        if (conf.getSinkBinding() != null) {
+            if (conf.getEnvironment() == null) {
+                conf.setEnvironment(new KnativeEnvironment());
             }
 
-            conf.setEnvironment(env);
+            // if a SinkBinding is configured, then we must add it to the environment
+            KnativeResource sbRes = KnativeSupport.asResource(getCamelContext(), conf.getSinkBinding());
+            conf.getEnvironment().getResources().add(sbRes);
+        }
+
+        if (conf.getEnvironment() == null) {
+            throw new IllegalStateException("Cannot load Knative configuration from file or env variable");
         }
 
         return conf;
diff --git a/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeConfiguration.java b/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeConfiguration.java
index 39f404bb81d..69233bb3438 100644
--- a/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeConfiguration.java
+++ b/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeConfiguration.java
@@ -16,20 +16,23 @@
  */
 package org.apache.camel.component.knative;
 
-import java.util.HashMap;
-import java.util.Map;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.cloudevents.CloudEvents;
 import org.apache.camel.component.knative.spi.KnativeEnvironment;
+import org.apache.camel.component.knative.spi.KnativeSinkBinding;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
 
+import java.util.HashMap;
+import java.util.Map;
+
 @UriParams
 public class KnativeConfiguration implements Cloneable {
     @UriParam
     private KnativeEnvironment environment;
     @UriParam
+    private KnativeSinkBinding sinkBinding;
+    @UriParam
     private String typeId;
     @UriParam(defaultValue = "1.0", enums = "1.0,1.0.1")
     private String cloudEventsSpecVersion = CloudEvents.v1_0.version();
@@ -69,6 +72,17 @@ public class KnativeConfiguration implements Cloneable {
         this.environment = environment;
     }
 
+    public KnativeSinkBinding getSinkBinding() {
+        return sinkBinding;
+    }
+
+    /**
+     * The SinkBinding configuration.
+     */
+    public void setSinkBinding(KnativeSinkBinding sinkBinding) {
+        this.sinkBinding = sinkBinding;
+    }
+
     public String getTypeId() {
         return typeId;
     }
diff --git a/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeProducer.java b/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeProducer.java
index 8434f7c0f28..9d9ef02b29f 100644
--- a/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeProducer.java
+++ b/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeProducer.java
@@ -19,6 +19,7 @@ package org.apache.camel.component.knative;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.AsyncProcessor;
@@ -26,14 +27,24 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
+import org.apache.camel.health.HealthCheck;
+import org.apache.camel.health.HealthCheckHelper;
+import org.apache.camel.health.HealthCheckResultBuilder;
+import org.apache.camel.health.WritableHealthCheckRepository;
+import org.apache.camel.impl.health.AbstractHealthCheck;
+import org.apache.camel.impl.health.ProducersHealthCheckRepository;
 import org.apache.camel.support.AsyncProcessorConverterHelper;
 import org.apache.camel.support.DefaultAsyncProducer;
 import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.service.ServiceHelper;
+import org.apache.camel.util.ObjectHelper;
 
 public class KnativeProducer extends DefaultAsyncProducer {
     final AsyncProcessor processor;
 
+    private WritableHealthCheckRepository healthCheckRepository;
+    private HealthCheck producerHealthCheck;
+
     public KnativeProducer(Endpoint endpoint, Processor processor, Processor... processors) throws Exception {
         super(endpoint);
 
@@ -42,12 +53,20 @@ public class KnativeProducer extends DefaultAsyncProducer {
         Collections.addAll(elements, processors);
 
         CamelContext camelContext = getEndpoint().getCamelContext();
-        Processor pipeline = PluginHelper.getProcessorFactory(camelContext).createProcessor(camelContext, "Pipeline",
+
+        Processor pipeline = PluginHelper.getProcessorFactory(camelContext).createProcessor(
+                camelContext,
+                "Pipeline",
                 new Object[] { elements });
 
         this.processor = AsyncProcessorConverterHelper.convert(pipeline);
     }
 
+    @Override
+    public KnativeEndpoint getEndpoint() {
+        return (KnativeEndpoint) super.getEndpoint();
+    }
+
     @Override
     public boolean process(Exchange exchange, AsyncCallback callback) {
         return processor.process(exchange, callback);
@@ -55,11 +74,31 @@ public class KnativeProducer extends DefaultAsyncProducer {
 
     @Override
     protected void doStart() throws Exception {
+        if (getEndpoint().getConfiguration().getSinkBinding() != null) {
+            // health-check is optional so discover and resolve
+            healthCheckRepository = HealthCheckHelper.getHealthCheckRepository(
+                    getEndpoint().getCamelContext(),
+                    ProducersHealthCheckRepository.REPOSITORY_ID,
+                    WritableHealthCheckRepository.class);
+
+            if (healthCheckRepository != null) {
+                producerHealthCheck = new SinkBindingHealthCheck(getEndpoint());
+                producerHealthCheck.setEnabled(getEndpoint().getComponent().isHealthCheckProducerEnabled());
+
+                healthCheckRepository.addHealthCheck(producerHealthCheck);
+            }
+        }
+
         ServiceHelper.startService(processor);
     }
 
     @Override
     protected void doStop() throws Exception {
+        if (healthCheckRepository != null && producerHealthCheck != null) {
+            healthCheckRepository.removeHealthCheck(producerHealthCheck);
+            producerHealthCheck = null;
+        }
+
         ServiceHelper.stopService(processor);
     }
 
@@ -77,4 +116,27 @@ public class KnativeProducer extends DefaultAsyncProducer {
     protected void doShutdown() throws Exception {
         ServiceHelper.stopAndShutdownService(processor);
     }
+
+    public static class SinkBindingHealthCheck extends AbstractHealthCheck {
+        private final KnativeEndpoint endpoint;
+
+        public SinkBindingHealthCheck(KnativeEndpoint endpoint) {
+            super(endpoint.getId());
+
+            this.endpoint = endpoint;
+        }
+
+        @Override
+        protected void doCall(HealthCheckResultBuilder builder, Map<String, Object> options) {
+            final String kSinkUrl = endpoint.getCamelContext().resolvePropertyPlaceholders("{{k.sink:}}");
+
+            if (ObjectHelper.isNotEmpty(kSinkUrl)) {
+                builder.detail("K_SINK", kSinkUrl);
+                builder.up();
+            } else {
+                builder.message("K_SINK not defined");
+                builder.down();
+            }
+        }
+    }
 }
diff --git a/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeSupport.java b/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeSupport.java
new file mode 100644
index 00000000000..2cf2622af2d
--- /dev/null
+++ b/components/camel-knative/camel-knative-component/src/main/java/org/apache/camel/component/knative/KnativeSupport.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.knative;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+import java.util.HashMap;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.knative.spi.Knative;
+import org.apache.camel.component.knative.spi.KnativeResource;
+import org.apache.camel.component.knative.spi.KnativeSinkBinding;
+import org.apache.camel.util.ObjectHelper;
+
+public class KnativeSupport {
+    private KnativeSupport() {
+
+    }
+
+    public static KnativeResource asResource(CamelContext camelContext, KnativeSinkBinding binding) {
+        final String kSinkUrl = camelContext.resolvePropertyPlaceholders("{{k.sink:}}");
+        final String kCeOverride = camelContext.resolvePropertyPlaceholders("{{k.ce.overrides:}}");
+
+        // create a synthetic service definition to target the K_SINK url
+        KnativeResource resource = new KnativeResource();
+        resource.setEndpointKind(Knative.EndpointKind.sink);
+        resource.setType(binding.getType());
+        resource.setName(binding.getName());
+        resource.setObjectApiVersion(binding.getObjectApiVersion());
+        resource.setObjectKind(binding.getObjectKind());
+
+        if (ObjectHelper.isNotEmpty(kSinkUrl)) {
+            resource.setUrl(kSinkUrl);
+        }
+
+        if (binding.getType() == Knative.Type.event) {
+            resource.setObjectName(binding.getName());
+        }
+
+        if (ObjectHelper.isNotEmpty(kCeOverride)) {
+            try (Reader reader = new StringReader(kCeOverride)) {
+                // assume K_CE_OVERRIDES is defined as simple key/val json
+                Knative.MAPPER.readValue(
+                        reader,
+                        new TypeReference<HashMap<String, String>>() {
+                        }).forEach(resource::addCeOverride);
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        return resource;
+    }
+}
diff --git a/components/camel-knative/camel-knative-component/src/test/java/org/apache/camel/component/knative/KnativeSinkBindingTest.java b/components/camel-knative/camel-knative-component/src/test/java/org/apache/camel/component/knative/KnativeSinkBindingTest.java
new file mode 100644
index 00000000000..dcb138dd520
--- /dev/null
+++ b/components/camel-knative/camel-knative-component/src/test/java/org/apache/camel/component/knative/KnativeSinkBindingTest.java
@@ -0,0 +1,130 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.knative;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.knative.spi.Knative;
+import org.apache.camel.component.knative.spi.KnativeSinkBinding;
+import org.apache.camel.health.HealthCheck;
+import org.apache.camel.health.HealthCheckHelper;
+import org.apache.camel.health.HealthCheckRepository;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.impl.health.ProducersHealthCheckRepository;
+import org.junit.jupiter.api.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class KnativeSinkBindingTest {
+
+    @Test
+    void testSinkBindingHealthCheckUP() throws Exception {
+        try (CamelContext context = new DefaultCamelContext()) {
+            HealthCheckRepository producersHc = HealthCheckHelper.getHealthCheckRepository(
+                    context,
+                    ProducersHealthCheckRepository.REPOSITORY_ID,
+                    HealthCheckRepository.class);
+
+            producersHc.setEnabled(true);
+
+            KnativeSinkBinding sb = new KnativeSinkBinding();
+            sb.setName("sb");
+            sb.setType(Knative.Type.channel);
+            sb.setObjectKind("InMemoryChannel");
+            sb.setObjectApiVersion("messaging.knative.dev/v1");
+
+            KnativeComponent component = new KnativeComponent();
+            component.setHealthCheckProducerEnabled(true);
+            component.getConfiguration().setSinkBinding(sb);
+            component.setConsumerFactory(new KnativeTransportNoop());
+            component.setProducerFactory(new KnativeTransportNoop());
+
+            context.addComponent(KnativeConstants.SCHEME, component);
+            context.getPropertiesComponent().addOverrideProperty("k.sink", "http://sb.scv.cluster.local:8081");
+
+            KnativeEndpoint endpoint = context.getEndpoint("knative:channel/sb", KnativeEndpoint.class);
+            assertThat(endpoint).isNotNull();
+            assertThat(endpoint.lookupServiceDefinition("sb", Knative.EndpointKind.sink))
+                    .isPresent().get()
+                    .satisfies(res -> {
+                        assertThat(res.getObjectKind()).isEqualTo(sb.getObjectKind());
+                        assertThat(res.getObjectApiVersion()).isEqualTo(sb.getObjectApiVersion());
+                        assertThat(res.getType()).isEqualTo(sb.getType());
+                        assertThat(res.getUrl()).isEqualTo("http://sb.scv.cluster.local:8081");
+                    });
+
+            KnativeProducer producer = (KnativeProducer) endpoint.createProducer();
+            assertThat(producer).isNotNull();
+
+            producer.start();
+
+            assertThat(producersHc).isNotNull();
+
+            assertThat(producersHc.getCheck(endpoint.getId()).map(HealthCheck::call))
+                    .isPresent().get()
+                    .hasFieldOrPropertyWithValue("state", HealthCheck.State.UP);
+
+        }
+    }
+
+    @Test
+    void testSinkBindingHealthCheckDown() throws Exception {
+        try (CamelContext context = new DefaultCamelContext()) {
+            HealthCheckRepository producersHc = HealthCheckHelper.getHealthCheckRepository(
+                    context,
+                    ProducersHealthCheckRepository.REPOSITORY_ID,
+                    HealthCheckRepository.class);
+
+            producersHc.setEnabled(true);
+
+            KnativeSinkBinding sb = new KnativeSinkBinding();
+            sb.setName("sb");
+            sb.setType(Knative.Type.channel);
+            sb.setObjectKind("InMemoryChannel");
+            sb.setObjectApiVersion("messaging.knative.dev/v1");
+
+            KnativeComponent component = new KnativeComponent();
+            component.setHealthCheckProducerEnabled(true);
+            component.getConfiguration().setSinkBinding(sb);
+            component.setConsumerFactory(new KnativeTransportNoop());
+            component.setProducerFactory(new KnativeTransportNoop());
+
+            context.addComponent(KnativeConstants.SCHEME, component);
+
+            KnativeEndpoint endpoint = context.getEndpoint("knative:channel/sb", KnativeEndpoint.class);
+            assertThat(endpoint).isNotNull();
+            assertThat(endpoint.lookupServiceDefinition("sb", Knative.EndpointKind.sink))
+                    .isPresent().get().satisfies(res -> {
+                        assertThat(res.getObjectKind()).isEqualTo(sb.getObjectKind());
+                        assertThat(res.getObjectApiVersion()).isEqualTo(sb.getObjectApiVersion());
+                        assertThat(res.getType()).isEqualTo(sb.getType());
+                        assertThat(res.getUrl()).isNull();
+                    });
+
+            KnativeProducer producer = (KnativeProducer) endpoint.createProducer();
+            assertThat(producer).isNotNull();
+
+            producer.start();
+
+            assertThat(producersHc).isNotNull();
+
+            assertThat(producersHc.getCheck(endpoint.getId()).map(HealthCheck::call))
+                    .isPresent().get()
+                    .hasFieldOrPropertyWithValue("state", HealthCheck.State.DOWN);
+
+        }
+    }
+}
diff --git a/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpConsumer.java b/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpConsumer.java
index 7ebf2569284..d3b74233fd9 100644
--- a/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpConsumer.java
+++ b/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpConsumer.java
@@ -176,7 +176,7 @@ public class KnativeHttpConsumer extends DefaultConsumer {
         final Exchange exchange = getEndpoint().createExchange();
         final Message message = toMessage(request, exchange);
 
-        Buffer payload = routingContext.getBody();
+        Buffer payload = routingContext.body().buffer();
         if (payload != null) {
             message.setBody(payload.getBytes());
         } else {
@@ -187,7 +187,7 @@ public class KnativeHttpConsumer extends DefaultConsumer {
         // need to process the request on a thread on the Vert.x worker pool.
         //
         // As example the following route may block the Vert.x event loop as the camel-http component
-        // is not async so if the service is scaled-down, the it may take a while to become ready and
+        // is not async so if the service is scaled-down, then it may take a while to become ready and
         // the camel-http component blocks until the service becomes available.
         //
         // from("knative:event/my.event")
diff --git a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/KnativeComponentBuilderFactory.java b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/KnativeComponentBuilderFactory.java
index bfb9b5c560d..0b78643008f 100644
--- a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/KnativeComponentBuilderFactory.java
+++ b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/KnativeComponentBuilderFactory.java
@@ -193,6 +193,22 @@ public interface KnativeComponentBuilderFactory {
             doSetProperty("producerFactory", producerFactory);
             return this;
         }
+        /**
+         * The SinkBinding configuration.
+         * 
+         * The option is a:
+         * &lt;code&gt;org.apache.camel.component.knative.spi.KnativeSinkBinding&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param sinkBinding the value to set
+         * @return the dsl builder
+         */
+        default KnativeComponentBuilder sinkBinding(
+                org.apache.camel.component.knative.spi.KnativeSinkBinding sinkBinding) {
+            doSetProperty("sinkBinding", sinkBinding);
+            return this;
+        }
         /**
          * Set the transport options.
          * 
@@ -374,6 +390,42 @@ public interface KnativeComponentBuilderFactory {
             doSetProperty("name", name);
             return this;
         }
+        /**
+         * Used for enabling or disabling all consumer based health checks from
+         * this component.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: true
+         * Group: health
+         * 
+         * @param healthCheckConsumerEnabled the value to set
+         * @return the dsl builder
+         */
+        default KnativeComponentBuilder healthCheckConsumerEnabled(
+                boolean healthCheckConsumerEnabled) {
+            doSetProperty("healthCheckConsumerEnabled", healthCheckConsumerEnabled);
+            return this;
+        }
+        /**
+         * Used for enabling or disabling all producer based health checks from
+         * this component. Notice: Camel has by default disabled all producer
+         * based health-checks. You can turn on producer checks globally by
+         * setting camel.health.producersEnabled=true.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: true
+         * Group: health
+         * 
+         * @param healthCheckProducerEnabled the value to set
+         * @return the dsl builder
+         */
+        default KnativeComponentBuilder healthCheckProducerEnabled(
+                boolean healthCheckProducerEnabled) {
+            doSetProperty("healthCheckProducerEnabled", healthCheckProducerEnabled);
+            return this;
+        }
     }
 
     class KnativeComponentBuilderImpl
@@ -407,6 +459,7 @@ public interface KnativeComponentBuilderFactory {
             case "environmentPath": ((KnativeComponent) component).setEnvironmentPath((java.lang.String) value); return true;
             case "filters": getOrCreateConfiguration((KnativeComponent) component).setFilters((java.util.Map) value); return true;
             case "producerFactory": ((KnativeComponent) component).setProducerFactory((org.apache.camel.component.knative.spi.KnativeProducerFactory) value); return true;
+            case "sinkBinding": getOrCreateConfiguration((KnativeComponent) component).setSinkBinding((org.apache.camel.component.knative.spi.KnativeSinkBinding) value); return true;
             case "transportOptions": getOrCreateConfiguration((KnativeComponent) component).setTransportOptions((java.util.Map) value); return true;
             case "typeId": getOrCreateConfiguration((KnativeComponent) component).setTypeId((java.lang.String) value); return true;
             case "bridgeErrorHandler": ((KnativeComponent) component).setBridgeErrorHandler((boolean) value); return true;
@@ -417,6 +470,8 @@ public interface KnativeComponentBuilderFactory {
             case "autowiredEnabled": ((KnativeComponent) component).setAutowiredEnabled((boolean) value); return true;
             case "kind": getOrCreateConfiguration((KnativeComponent) component).setKind((java.lang.String) value); return true;
             case "name": getOrCreateConfiguration((KnativeComponent) component).setName((java.lang.String) value); return true;
+            case "healthCheckConsumerEnabled": ((KnativeComponent) component).setHealthCheckConsumerEnabled((boolean) value); return true;
+            case "healthCheckProducerEnabled": ((KnativeComponent) component).setHealthCheckProducerEnabled((boolean) value); return true;
             default: return false;
             }
         }
diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/KnativeEndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/KnativeEndpointBuilderFactory.java
index 2681f0466eb..0d7dc2a161b 100644
--- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/KnativeEndpointBuilderFactory.java
+++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/KnativeEndpointBuilderFactory.java
@@ -170,6 +170,37 @@ public interface KnativeEndpointBuilderFactory {
             doSetProperty("filters", filters);
             return this;
         }
+        /**
+         * The SinkBinding configuration.
+         * 
+         * The option is a:
+         * &lt;code&gt;org.apache.camel.component.knative.spi.KnativeSinkBinding&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param sinkBinding the value to set
+         * @return the dsl builder
+         */
+        default KnativeEndpointConsumerBuilder sinkBinding(
+                org.apache.camel.component.knative.spi.KnativeSinkBinding sinkBinding) {
+            doSetProperty("sinkBinding", sinkBinding);
+            return this;
+        }
+        /**
+         * The SinkBinding configuration.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;org.apache.camel.component.knative.spi.KnativeSinkBinding&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param sinkBinding the value to set
+         * @return the dsl builder
+         */
+        default KnativeEndpointConsumerBuilder sinkBinding(String sinkBinding) {
+            doSetProperty("sinkBinding", sinkBinding);
+            return this;
+        }
         /**
          * Set the transport options.
          * 
@@ -596,6 +627,37 @@ public interface KnativeEndpointBuilderFactory {
             doSetProperty("filters", filters);
             return this;
         }
+        /**
+         * The SinkBinding configuration.
+         * 
+         * The option is a:
+         * &lt;code&gt;org.apache.camel.component.knative.spi.KnativeSinkBinding&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param sinkBinding the value to set
+         * @return the dsl builder
+         */
+        default KnativeEndpointProducerBuilder sinkBinding(
+                org.apache.camel.component.knative.spi.KnativeSinkBinding sinkBinding) {
+            doSetProperty("sinkBinding", sinkBinding);
+            return this;
+        }
+        /**
+         * The SinkBinding configuration.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;org.apache.camel.component.knative.spi.KnativeSinkBinding&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param sinkBinding the value to set
+         * @return the dsl builder
+         */
+        default KnativeEndpointProducerBuilder sinkBinding(String sinkBinding) {
+            doSetProperty("sinkBinding", sinkBinding);
+            return this;
+        }
         /**
          * Set the transport options.
          * 
@@ -870,6 +932,37 @@ public interface KnativeEndpointBuilderFactory {
             doSetProperty("filters", filters);
             return this;
         }
+        /**
+         * The SinkBinding configuration.
+         * 
+         * The option is a:
+         * &lt;code&gt;org.apache.camel.component.knative.spi.KnativeSinkBinding&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param sinkBinding the value to set
+         * @return the dsl builder
+         */
+        default KnativeEndpointBuilder sinkBinding(
+                org.apache.camel.component.knative.spi.KnativeSinkBinding sinkBinding) {
+            doSetProperty("sinkBinding", sinkBinding);
+            return this;
+        }
+        /**
+         * The SinkBinding configuration.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;org.apache.camel.component.knative.spi.KnativeSinkBinding&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param sinkBinding the value to set
+         * @return the dsl builder
+         */
+        default KnativeEndpointBuilder sinkBinding(String sinkBinding) {
+            doSetProperty("sinkBinding", sinkBinding);
+            return this;
+        }
         /**
          * Set the transport options.
          *