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 2020/11/12 14:55:00 UTC

[camel-k-runtime] branch master updated: knative: split producer and consumer #521

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

lburgazzoli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-runtime.git


The following commit(s) were added to refs/heads/master by this push:
     new c758c1e  knative: split producer and consumer #521
c758c1e is described below

commit c758c1eb252075c8b1643dc23ba4ab8c0bbb8d63
Author: Luca Burgazzoli <lb...@gmail.com>
AuthorDate: Thu Oct 1 19:16:07 2020 +0200

    knative: split producer and consumer #521
---
 .github/workflows/ci-build.yml                     |   2 +
 camel-k-knative/{ => consumer}/deployment/pom.xml  |  24 +---
 .../deployment/KnativeConsumerFeature.java}        |   6 +-
 .../deployment/KnativeConsumerProcessor.java       |  40 ++++++
 camel-k-knative/{ => consumer}/pom.xml             |   5 +-
 camel-k-knative/{ => consumer}/runtime/pom.xml     |  16 +--
 .../knative/consumer/KnativeConsumerRecorder.java} |  37 +++---
 camel-k-knative/deployment/pom.xml                 |  17 ---
 .../{Feature.java => KnativeFeature.java}          |   4 +-
 ...loymentProcessor.java => KnativeProcessor.java} |  17 +--
 camel-k-knative/pom.xml                            |   3 +-
 camel-k-knative/{ => producer}/deployment/pom.xml  |  24 +---
 .../deployment/KnativeProducerFeature.java}        |   6 +-
 .../deployment/KnativeProducerProcessor.java       |  40 ++++++
 camel-k-knative/{ => producer}/pom.xml             |   5 +-
 camel-k-knative/{ => producer}/runtime/pom.xml     |  22 +---
 .../knative/producer/KnativeProducerRecorder.java} |  35 +++---
 camel-k-knative/runtime/pom.xml                    |  25 +---
 .../camel/k/quarkus/knative/KnativeRecorder.java   |  27 +----
 ...eTransport.java => KnativeConsumerFactory.java} |  16 +--
 ...eTransport.java => KnativeProducerFactory.java} |  17 +--
 .../camel-knative/camel-knative-http/pom.xml       |  16 ++-
 .../knative/http/KnativeHttpConsumer.java          |  49 +++++++-
 ...nsport.java => KnativeHttpConsumerFactory.java} |  67 +++--------
 ...nsport.java => KnativeHttpProducerFactory.java} |  60 +++------
 .../knative/transport/{http => http-consumer}      |   2 +-
 .../knative/transport/{http => http-producer}      |   2 +-
 .../component/knative/http/KnativeHttpTest.java    |  51 +-------
 .../knative/http/KnativeHttpTestSupport.java       |  20 +++
 .../knative/KnativeComponentConfigurer.java        |  13 +-
 .../apache/camel/component/knative/knative.json    |   5 +-
 .../src/main/docs/knative-component.adoc           |   5 +-
 .../camel/component/knative/KnativeComponent.java  | 134 +++++++++++++++------
 .../camel/component/knative/KnativeEndpoint.java   |  12 +-
 .../component/knative/KnativeComponentTest.java    |   3 +-
 .../component/knative/KnativeTransportNoop.java    |   5 +-
 examples/knative/data/env.json                     |   5 +-
 examples/knative/data/routes.yaml                  |  21 ++--
 examples/knative/pom.xml                           |   8 ++
 .../pom.xml                                        |  15 +--
 .../k/quarkus/it/KnativeConsumerApplication.java   |  53 ++++++++
 .../src/main/resources/application.properties      |   3 +-
 .../camel/k/quarkus/it/KnativeConsumerIT.java      |  16 +--
 .../camel/k/quarkus/it/KnativeConsumerTest.java    |  48 ++++++++
 .../pom.xml                                        |  15 +--
 .../k/quarkus/it/KnativeProducerApplication.java   |  53 ++++++++
 .../src/main/resources/application.properties      |   3 +-
 .../camel/k/quarkus/it/KnativeProducerIT.java      |  16 +--
 .../camel/k/quarkus/it/KnativeProducerTest.java    |  48 ++++++++
 itests/camel-k-itests-knative-sinkbinding/pom.xml  |   8 ++
 .../camel-k-itests-knative-source-groovy/pom.xml   |   8 ++
 itests/camel-k-itests-knative-source-java/pom.xml  |   8 ++
 itests/camel-k-itests-knative-source-js/pom.xml    |   8 ++
 itests/camel-k-itests-knative-source-xml/pom.xml   |   8 ++
 itests/camel-k-itests-knative-source-yaml/pom.xml  |   8 ++
 itests/camel-k-itests-knative/pom.xml              |   8 ++
 .../camel/k/quarkus/it/KnativeApplication.java     |   6 +
 .../org/apache/camel/k/quarkus/it/KnativeTest.java |   8 ++
 itests/camel-k-itests-runtime-yaml/pom.xml         |  34 ++++++
 .../src/main/resources/application.properties      |   2 +-
 itests/pom.xml                                     |   2 +
 pom.xml                                            |  20 +++
 .../camel/k/catalog/model/CamelArtifact.java       |   7 ++
 .../apache/camel/k/catalog/model/CamelScheme.java  |  16 +++
 ...CamelArtifact.java => CamelScopedArtifact.java} |  37 ++----
 .../src/it/generate-catalog/verify.groovy          |  35 ++++--
 .../maven/processors/CatalogProcessor3x.java       |  10 +-
 support/camel-k-runtime-bom/pom.xml                |  10 ++
 68 files changed, 843 insertions(+), 536 deletions(-)

diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml
index 540f857..87ec4d5 100644
--- a/.github/workflows/ci-build.yml
+++ b/.github/workflows/ci-build.yml
@@ -84,6 +84,8 @@ jobs:
           - :camel-k-itests-cron
           - :camel-k-itests-kamelet
           - :camel-k-itests-knative
+          - :camel-k-itests-knative-producer
+          - :camel-k-itests-knative-consumer
           - :camel-k-itests-knative-sinkbinding
           #- :camel-k-itests-knative-source-js
           - :camel-k-itests-knative-source-xml
diff --git a/camel-k-knative/deployment/pom.xml b/camel-k-knative/consumer/deployment/pom.xml
similarity index 74%
copy from camel-k-knative/deployment/pom.xml
copy to camel-k-knative/consumer/deployment/pom.xml
index 31f4edb..28e3ea3 100644
--- a/camel-k-knative/deployment/pom.xml
+++ b/camel-k-knative/consumer/deployment/pom.xml
@@ -20,41 +20,23 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
         <groupId>org.apache.camel.k</groupId>
-        <artifactId>camel-k-knative-parent</artifactId>
+        <artifactId>camel-k-knative-consumer-parent</artifactId>
         <version>1.6.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>camel-k-knative-deployment</artifactId>
+    <artifactId>camel-k-knative-consumer-deployment</artifactId>
 
     <dependencies>
         <dependency>
             <groupId>org.apache.camel.k</groupId>
-            <artifactId>camel-k-knative</artifactId>
+            <artifactId>camel-k-knative-consumer</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.camel.k</groupId>
-            <artifactId>camel-k-core-deployment</artifactId>
-        </dependency>
-
-        <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-core-deployment</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-core-cloud-deployment</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-http-common-deployment</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>io.quarkus</groupId>
-            <artifactId>quarkus-vertx-core-deployment</artifactId>
-        </dependency>
-        <dependency>
             <groupId>io.quarkus</groupId>
             <artifactId>quarkus-vertx-http-deployment</artifactId>
         </dependency>
diff --git a/camel-k-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/Feature.java b/camel-k-knative/consumer/deployment/src/main/java/org/apache/camel/k/quarkus/knative/consumer/deployment/KnativeConsumerFeature.java
similarity index 85%
copy from camel-k-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/Feature.java
copy to camel-k-knative/consumer/deployment/src/main/java/org/apache/camel/k/quarkus/knative/consumer/deployment/KnativeConsumerFeature.java
index a3db07c..667deae 100644
--- a/camel-k-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/Feature.java
+++ b/camel-k-knative/consumer/deployment/src/main/java/org/apache/camel/k/quarkus/knative/consumer/deployment/KnativeConsumerFeature.java
@@ -14,13 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.k.quarkus.knative.deployment;
+package org.apache.camel.k.quarkus.knative.consumer.deployment;
 
 import io.quarkus.deployment.annotations.BuildStep;
 import io.quarkus.deployment.builditem.FeatureBuildItem;
 
-public class Feature {
-    private static final String FEATURE = "camel-k-runtime-knative";
+public class KnativeConsumerFeature {
+    public static final String FEATURE = "camel-k-knative-consumer";
 
     @BuildStep
     FeatureBuildItem feature() {
diff --git a/camel-k-knative/consumer/deployment/src/main/java/org/apache/camel/k/quarkus/knative/consumer/deployment/KnativeConsumerProcessor.java b/camel-k-knative/consumer/deployment/src/main/java/org/apache/camel/k/quarkus/knative/consumer/deployment/KnativeConsumerProcessor.java
new file mode 100644
index 0000000..b01def6
--- /dev/null
+++ b/camel-k-knative/consumer/deployment/src/main/java/org/apache/camel/k/quarkus/knative/consumer/deployment/KnativeConsumerProcessor.java
@@ -0,0 +1,40 @@
+/*
+ * 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.k.quarkus.knative.consumer.deployment;
+
+import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.deployment.annotations.ExecutionTime;
+import io.quarkus.deployment.annotations.Record;
+import io.quarkus.vertx.http.deployment.VertxWebRouterBuildItem;
+import org.apache.camel.k.quarkus.knative.consumer.KnativeConsumerRecorder;
+import org.apache.camel.quarkus.core.deployment.spi.CamelRuntimeBeanBuildItem;
+import org.apache.camel.spi.ComponentCustomizer;
+
+public class KnativeConsumerProcessor {
+    @Record(ExecutionTime.RUNTIME_INIT)
+    @BuildStep
+    CamelRuntimeBeanBuildItem knativeComponentCustomizer(
+        KnativeConsumerRecorder recorder,
+        VertxWebRouterBuildItem router) {
+
+        return new CamelRuntimeBeanBuildItem(
+            KnativeConsumerFeature.FEATURE + "-customizer",
+            ComponentCustomizer.class.getName(),
+            recorder.createKnativeConsumerFactoryCustomizer(router.getRouter())
+        );
+    }
+}
diff --git a/camel-k-knative/pom.xml b/camel-k-knative/consumer/pom.xml
similarity index 90%
copy from camel-k-knative/pom.xml
copy to camel-k-knative/consumer/pom.xml
index deba840..e20f5ed 100644
--- a/camel-k-knative/pom.xml
+++ b/camel-k-knative/consumer/pom.xml
@@ -20,16 +20,15 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
         <groupId>org.apache.camel.k</groupId>
-        <artifactId>camel-k-runtime-project</artifactId>
+        <artifactId>camel-k-knative-parent</artifactId>
         <version>1.6.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <packaging>pom</packaging>
 
-    <artifactId>camel-k-knative-parent</artifactId>
+    <artifactId>camel-k-knative-consumer-parent</artifactId>
 
     <modules>
-        <module>impl</module>
         <module>runtime</module>
         <module>deployment</module>
     </modules>
diff --git a/camel-k-knative/runtime/pom.xml b/camel-k-knative/consumer/runtime/pom.xml
similarity index 89%
copy from camel-k-knative/runtime/pom.xml
copy to camel-k-knative/consumer/runtime/pom.xml
index d4bf7c2..72c51b2 100644
--- a/camel-k-knative/runtime/pom.xml
+++ b/camel-k-knative/consumer/runtime/pom.xml
@@ -20,25 +20,21 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
         <groupId>org.apache.camel.k</groupId>
-        <artifactId>camel-k-knative-parent</artifactId>
+        <artifactId>camel-k-knative-consumer-parent</artifactId>
         <version>1.6.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>camel-k-knative</artifactId>
+    <artifactId>camel-k-knative-consumer</artifactId>
 
     <dependencies>
         <dependency>
             <groupId>io.quarkus</groupId>
-            <artifactId>quarkus-vertx-core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.quarkus</groupId>
             <artifactId>quarkus-vertx-http</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.camel.k</groupId>
-            <artifactId>camel-k-core</artifactId>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-core</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel.k</groupId>
@@ -56,10 +52,6 @@
             <groupId>org.apache.camel.k</groupId>
             <artifactId>camel-k-knative-impl</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-http-common</artifactId>
-        </dependency>
     </dependencies>
 
     <build>
diff --git a/camel-k-knative/runtime/src/main/java/org/apache/camel/k/quarkus/knative/KnativeRecorder.java b/camel-k-knative/consumer/runtime/src/main/java/org/apache/camel/k/quarkus/knative/consumer/KnativeConsumerRecorder.java
similarity index 52%
copy from camel-k-knative/runtime/src/main/java/org/apache/camel/k/quarkus/knative/KnativeRecorder.java
copy to camel-k-knative/consumer/runtime/src/main/java/org/apache/camel/k/quarkus/knative/consumer/KnativeConsumerRecorder.java
index edabff7..cea933a 100644
--- a/camel-k-knative/runtime/src/main/java/org/apache/camel/k/quarkus/knative/KnativeRecorder.java
+++ b/camel-k-knative/consumer/runtime/src/main/java/org/apache/camel/k/quarkus/knative/consumer/KnativeConsumerRecorder.java
@@ -14,38 +14,31 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.k.quarkus.knative;
-
-import java.util.function.Supplier;
+package org.apache.camel.k.quarkus.knative.consumer;
 
 import io.quarkus.runtime.RuntimeValue;
 import io.quarkus.runtime.annotations.Recorder;
-import io.vertx.core.Handler;
-import io.vertx.core.Vertx;
 import io.vertx.ext.web.Router;
-import io.vertx.ext.web.RoutingContext;
+import org.apache.camel.Component;
 import org.apache.camel.component.knative.KnativeComponent;
-import org.apache.camel.component.knative.http.KnativeHttpTransport;
-import org.apache.camel.component.platform.http.vertx.VertxPlatformHttpRouter;
+import org.apache.camel.component.knative.http.KnativeHttpConsumerFactory;
+import org.apache.camel.spi.ComponentCustomizer;
 
 @Recorder
-public class KnativeRecorder {
-    public RuntimeValue<KnativeComponent> createKnativeComponent(
-        Supplier<Vertx> vertx,
-        RuntimeValue<Router> router,
-        Handler<RoutingContext> bodyHandler) {
+public class KnativeConsumerRecorder {
+    public RuntimeValue<ComponentCustomizer> createKnativeConsumerFactoryCustomizer(RuntimeValue<Router> router) {
+        KnativeHttpConsumerFactory factory = new KnativeHttpConsumerFactory();
+        factory.setRouter(router.getValue());
 
-        KnativeHttpTransport transport = new KnativeHttpTransport();
-        transport.setRouter(new VertxPlatformHttpRouter(vertx.get(), router.getValue()) {
+        ComponentCustomizer cf = new ComponentCustomizer() {
             @Override
-            public Handler<RoutingContext> bodyHandler() {
-                return bodyHandler;
+            public void configure(String name, Component target) {
+                if (target instanceof KnativeComponent) {
+                    ((KnativeComponent) target).setConsumerFactory(factory);
+                }
             }
-        });
-
-        KnativeComponent component = new KnativeComponent();
-        component.setTransport(transport);
+        };
 
-        return new RuntimeValue<>(component);
+        return new RuntimeValue<>(cf);
     }
 }
diff --git a/camel-k-knative/deployment/pom.xml b/camel-k-knative/deployment/pom.xml
index 31f4edb..ccc84af 100644
--- a/camel-k-knative/deployment/pom.xml
+++ b/camel-k-knative/deployment/pom.xml
@@ -41,23 +41,6 @@
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-core-deployment</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-core-cloud-deployment</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-http-common-deployment</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>io.quarkus</groupId>
-            <artifactId>quarkus-vertx-core-deployment</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.quarkus</groupId>
-            <artifactId>quarkus-vertx-http-deployment</artifactId>
-        </dependency>
     </dependencies>
 
     <build>
diff --git a/camel-k-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/Feature.java b/camel-k-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/KnativeFeature.java
similarity index 92%
copy from camel-k-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/Feature.java
copy to camel-k-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/KnativeFeature.java
index a3db07c..edc4062 100644
--- a/camel-k-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/Feature.java
+++ b/camel-k-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/KnativeFeature.java
@@ -19,8 +19,8 @@ package org.apache.camel.k.quarkus.knative.deployment;
 import io.quarkus.deployment.annotations.BuildStep;
 import io.quarkus.deployment.builditem.FeatureBuildItem;
 
-public class Feature {
-    private static final String FEATURE = "camel-k-runtime-knative";
+public class KnativeFeature {
+    private static final String FEATURE = "camel-k-knative";
 
     @BuildStep
     FeatureBuildItem feature() {
diff --git a/camel-k-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/DeploymentProcessor.java b/camel-k-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/KnativeProcessor.java
similarity index 81%
rename from camel-k-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/DeploymentProcessor.java
rename to camel-k-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/KnativeProcessor.java
index 877e5b0..68f42d7 100644
--- a/camel-k-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/DeploymentProcessor.java
+++ b/camel-k-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/KnativeProcessor.java
@@ -23,9 +23,6 @@ import io.quarkus.deployment.annotations.BuildStep;
 import io.quarkus.deployment.annotations.ExecutionTime;
 import io.quarkus.deployment.annotations.Record;
 import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
-import io.quarkus.vertx.core.deployment.CoreVertxBuildItem;
-import io.quarkus.vertx.http.deployment.BodyHandlerBuildItem;
-import io.quarkus.vertx.http.deployment.VertxWebRouterBuildItem;
 import org.apache.camel.component.knative.KnativeComponent;
 import org.apache.camel.component.knative.KnativeConstants;
 import org.apache.camel.component.knative.spi.KnativeEnvironment;
@@ -34,7 +31,7 @@ import org.apache.camel.quarkus.core.deployment.spi.CamelRuntimeBeanBuildItem;
 import org.apache.camel.quarkus.core.deployment.spi.CamelServiceFilter;
 import org.apache.camel.quarkus.core.deployment.spi.CamelServiceFilterBuildItem;
 
-public class DeploymentProcessor {
+public class KnativeProcessor {
     @BuildStep
     List<UnremovableBeanBuildItem> unremovableBeans() {
         return List.of(
@@ -60,19 +57,11 @@ public class DeploymentProcessor {
 
     @Record(ExecutionTime.RUNTIME_INIT)
     @BuildStep
-    CamelRuntimeBeanBuildItem knativeComponent(
-        KnativeRecorder recorder,
-        CoreVertxBuildItem vertx,
-        VertxWebRouterBuildItem router,
-        BodyHandlerBuildItem bodyHandlerBuildItem) {
-
+    CamelRuntimeBeanBuildItem knativeComponent(KnativeRecorder recorder) {
         return new CamelRuntimeBeanBuildItem(
             KnativeConstants.SCHEME,
             KnativeComponent.class.getName(),
-            recorder.createKnativeComponent(
-                vertx.getVertx(),
-                router.getRouter(),
-                bodyHandlerBuildItem.getHandler())
+            recorder.createKnativeComponent()
         );
     }
 }
diff --git a/camel-k-knative/pom.xml b/camel-k-knative/pom.xml
index deba840..5c558d1 100644
--- a/camel-k-knative/pom.xml
+++ b/camel-k-knative/pom.xml
@@ -30,9 +30,10 @@
 
     <modules>
         <module>impl</module>
+        <module>producer</module>
+        <module>consumer</module>
         <module>runtime</module>
         <module>deployment</module>
     </modules>
 
-
 </project>
diff --git a/camel-k-knative/deployment/pom.xml b/camel-k-knative/producer/deployment/pom.xml
similarity index 74%
copy from camel-k-knative/deployment/pom.xml
copy to camel-k-knative/producer/deployment/pom.xml
index 31f4edb..89f2320 100644
--- a/camel-k-knative/deployment/pom.xml
+++ b/camel-k-knative/producer/deployment/pom.xml
@@ -20,44 +20,26 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
         <groupId>org.apache.camel.k</groupId>
-        <artifactId>camel-k-knative-parent</artifactId>
+        <artifactId>camel-k-knative-producer-parent</artifactId>
         <version>1.6.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>camel-k-knative-deployment</artifactId>
+    <artifactId>camel-k-knative-producer-deployment</artifactId>
 
     <dependencies>
         <dependency>
             <groupId>org.apache.camel.k</groupId>
-            <artifactId>camel-k-knative</artifactId>
+            <artifactId>camel-k-knative-producer</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.camel.k</groupId>
-            <artifactId>camel-k-core-deployment</artifactId>
-        </dependency>
-
-        <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-core-deployment</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-core-cloud-deployment</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-http-common-deployment</artifactId>
-        </dependency>
-
-        <dependency>
             <groupId>io.quarkus</groupId>
             <artifactId>quarkus-vertx-core-deployment</artifactId>
         </dependency>
-        <dependency>
-            <groupId>io.quarkus</groupId>
-            <artifactId>quarkus-vertx-http-deployment</artifactId>
-        </dependency>
     </dependencies>
 
     <build>
diff --git a/camel-k-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/Feature.java b/camel-k-knative/producer/deployment/src/main/java/org/apache/camel/k/quarkus/knative/producer/deployment/KnativeProducerFeature.java
similarity index 85%
copy from camel-k-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/Feature.java
copy to camel-k-knative/producer/deployment/src/main/java/org/apache/camel/k/quarkus/knative/producer/deployment/KnativeProducerFeature.java
index a3db07c..15a4d2f 100644
--- a/camel-k-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/Feature.java
+++ b/camel-k-knative/producer/deployment/src/main/java/org/apache/camel/k/quarkus/knative/producer/deployment/KnativeProducerFeature.java
@@ -14,13 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.k.quarkus.knative.deployment;
+package org.apache.camel.k.quarkus.knative.producer.deployment;
 
 import io.quarkus.deployment.annotations.BuildStep;
 import io.quarkus.deployment.builditem.FeatureBuildItem;
 
-public class Feature {
-    private static final String FEATURE = "camel-k-runtime-knative";
+public class KnativeProducerFeature {
+    public static final String FEATURE = "camel-k-knative-producer";
 
     @BuildStep
     FeatureBuildItem feature() {
diff --git a/camel-k-knative/producer/deployment/src/main/java/org/apache/camel/k/quarkus/knative/producer/deployment/KnativeProducerProcessor.java b/camel-k-knative/producer/deployment/src/main/java/org/apache/camel/k/quarkus/knative/producer/deployment/KnativeProducerProcessor.java
new file mode 100644
index 0000000..3b7bd4e
--- /dev/null
+++ b/camel-k-knative/producer/deployment/src/main/java/org/apache/camel/k/quarkus/knative/producer/deployment/KnativeProducerProcessor.java
@@ -0,0 +1,40 @@
+/*
+ * 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.k.quarkus.knative.producer.deployment;
+
+import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.deployment.annotations.ExecutionTime;
+import io.quarkus.deployment.annotations.Record;
+import io.quarkus.vertx.core.deployment.CoreVertxBuildItem;
+import org.apache.camel.k.quarkus.knative.producer.KnativeProducerRecorder;
+import org.apache.camel.quarkus.core.deployment.spi.CamelRuntimeBeanBuildItem;
+import org.apache.camel.spi.ComponentCustomizer;
+
+public class KnativeProducerProcessor {
+    @Record(ExecutionTime.RUNTIME_INIT)
+    @BuildStep
+    CamelRuntimeBeanBuildItem knativeComponentCustomizer(
+        KnativeProducerRecorder recorder,
+        CoreVertxBuildItem vertx) {
+
+        return new CamelRuntimeBeanBuildItem(
+            KnativeProducerFeature.FEATURE + "-customizer",
+            ComponentCustomizer.class.getName(),
+            recorder.createKnativeProducerFactoryCustomizer(vertx.getVertx())
+        );
+    }
+}
diff --git a/camel-k-knative/pom.xml b/camel-k-knative/producer/pom.xml
similarity index 90%
copy from camel-k-knative/pom.xml
copy to camel-k-knative/producer/pom.xml
index deba840..36b5e8c 100644
--- a/camel-k-knative/pom.xml
+++ b/camel-k-knative/producer/pom.xml
@@ -20,16 +20,15 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
         <groupId>org.apache.camel.k</groupId>
-        <artifactId>camel-k-runtime-project</artifactId>
+        <artifactId>camel-k-knative-parent</artifactId>
         <version>1.6.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <packaging>pom</packaging>
 
-    <artifactId>camel-k-knative-parent</artifactId>
+    <artifactId>camel-k-knative-producer-parent</artifactId>
 
     <modules>
-        <module>impl</module>
         <module>runtime</module>
         <module>deployment</module>
     </modules>
diff --git a/camel-k-knative/runtime/pom.xml b/camel-k-knative/producer/runtime/pom.xml
similarity index 86%
copy from camel-k-knative/runtime/pom.xml
copy to camel-k-knative/producer/runtime/pom.xml
index d4bf7c2..3538820 100644
--- a/camel-k-knative/runtime/pom.xml
+++ b/camel-k-knative/producer/runtime/pom.xml
@@ -20,12 +20,12 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
         <groupId>org.apache.camel.k</groupId>
-        <artifactId>camel-k-knative-parent</artifactId>
+        <artifactId>camel-k-knative-producer-parent</artifactId>
         <version>1.6.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>camel-k-knative</artifactId>
+    <artifactId>camel-k-knative-producer</artifactId>
 
     <dependencies>
         <dependency>
@@ -33,12 +33,12 @@
             <artifactId>quarkus-vertx-core</artifactId>
         </dependency>
         <dependency>
-            <groupId>io.quarkus</groupId>
-            <artifactId>quarkus-vertx-http</artifactId>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-core</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel.k</groupId>
-            <artifactId>camel-k-core</artifactId>
+            <artifactId>camel-knative</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel.k</groupId>
@@ -46,20 +46,8 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel.k</groupId>
-            <artifactId>camel-knative</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel.k</groupId>
             <artifactId>camel-knative-http</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.apache.camel.k</groupId>
-            <artifactId>camel-k-knative-impl</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-http-common</artifactId>
-        </dependency>
     </dependencies>
 
     <build>
diff --git a/camel-k-knative/runtime/src/main/java/org/apache/camel/k/quarkus/knative/KnativeRecorder.java b/camel-k-knative/producer/runtime/src/main/java/org/apache/camel/k/quarkus/knative/producer/KnativeProducerRecorder.java
similarity index 53%
copy from camel-k-knative/runtime/src/main/java/org/apache/camel/k/quarkus/knative/KnativeRecorder.java
copy to camel-k-knative/producer/runtime/src/main/java/org/apache/camel/k/quarkus/knative/producer/KnativeProducerRecorder.java
index edabff7..07aa27c 100644
--- a/camel-k-knative/runtime/src/main/java/org/apache/camel/k/quarkus/knative/KnativeRecorder.java
+++ b/camel-k-knative/producer/runtime/src/main/java/org/apache/camel/k/quarkus/knative/producer/KnativeProducerRecorder.java
@@ -14,38 +14,33 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.k.quarkus.knative;
+package org.apache.camel.k.quarkus.knative.producer;
 
 import java.util.function.Supplier;
 
 import io.quarkus.runtime.RuntimeValue;
 import io.quarkus.runtime.annotations.Recorder;
-import io.vertx.core.Handler;
 import io.vertx.core.Vertx;
-import io.vertx.ext.web.Router;
-import io.vertx.ext.web.RoutingContext;
+import org.apache.camel.Component;
 import org.apache.camel.component.knative.KnativeComponent;
-import org.apache.camel.component.knative.http.KnativeHttpTransport;
-import org.apache.camel.component.platform.http.vertx.VertxPlatformHttpRouter;
+import org.apache.camel.component.knative.http.KnativeHttpProducerFactory;
+import org.apache.camel.spi.ComponentCustomizer;
 
 @Recorder
-public class KnativeRecorder {
-    public RuntimeValue<KnativeComponent> createKnativeComponent(
-        Supplier<Vertx> vertx,
-        RuntimeValue<Router> router,
-        Handler<RoutingContext> bodyHandler) {
+public class KnativeProducerRecorder {
+    public RuntimeValue<ComponentCustomizer> createKnativeProducerFactoryCustomizer(Supplier<Vertx> vertx) {
+        KnativeHttpProducerFactory factory = new KnativeHttpProducerFactory();
+        factory.setVertx(vertx.get());
 
-        KnativeHttpTransport transport = new KnativeHttpTransport();
-        transport.setRouter(new VertxPlatformHttpRouter(vertx.get(), router.getValue()) {
+        ComponentCustomizer cf = new ComponentCustomizer() {
             @Override
-            public Handler<RoutingContext> bodyHandler() {
-                return bodyHandler;
+            public void configure(String name, Component target) {
+                if (target instanceof KnativeComponent) {
+                    ((KnativeComponent) target).setProducerFactory(factory);
+                }
             }
-        });
+        };
 
-        KnativeComponent component = new KnativeComponent();
-        component.setTransport(transport);
-
-        return new RuntimeValue<>(component);
+        return new RuntimeValue<>(cf);
     }
 }
diff --git a/camel-k-knative/runtime/pom.xml b/camel-k-knative/runtime/pom.xml
index d4bf7c2..ec25fa8 100644
--- a/camel-k-knative/runtime/pom.xml
+++ b/camel-k-knative/runtime/pom.xml
@@ -29,36 +29,21 @@
 
     <dependencies>
         <dependency>
-            <groupId>io.quarkus</groupId>
-            <artifactId>quarkus-vertx-core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.quarkus</groupId>
-            <artifactId>quarkus-vertx-http</artifactId>
-        </dependency>
-        <dependency>
             <groupId>org.apache.camel.k</groupId>
             <artifactId>camel-k-core</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.camel.k</groupId>
-            <artifactId>camel-knative-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel.k</groupId>
-            <artifactId>camel-knative</artifactId>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-core</artifactId>
         </dependency>
+
         <dependency>
             <groupId>org.apache.camel.k</groupId>
-            <artifactId>camel-knative-http</artifactId>
+            <artifactId>camel-knative-api</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel.k</groupId>
-            <artifactId>camel-k-knative-impl</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-http-common</artifactId>
+            <artifactId>camel-knative</artifactId>
         </dependency>
     </dependencies>
 
diff --git a/camel-k-knative/runtime/src/main/java/org/apache/camel/k/quarkus/knative/KnativeRecorder.java b/camel-k-knative/runtime/src/main/java/org/apache/camel/k/quarkus/knative/KnativeRecorder.java
index edabff7..f27531c 100644
--- a/camel-k-knative/runtime/src/main/java/org/apache/camel/k/quarkus/knative/KnativeRecorder.java
+++ b/camel-k-knative/runtime/src/main/java/org/apache/camel/k/quarkus/knative/KnativeRecorder.java
@@ -16,36 +16,13 @@
  */
 package org.apache.camel.k.quarkus.knative;
 
-import java.util.function.Supplier;
-
 import io.quarkus.runtime.RuntimeValue;
 import io.quarkus.runtime.annotations.Recorder;
-import io.vertx.core.Handler;
-import io.vertx.core.Vertx;
-import io.vertx.ext.web.Router;
-import io.vertx.ext.web.RoutingContext;
 import org.apache.camel.component.knative.KnativeComponent;
-import org.apache.camel.component.knative.http.KnativeHttpTransport;
-import org.apache.camel.component.platform.http.vertx.VertxPlatformHttpRouter;
 
 @Recorder
 public class KnativeRecorder {
-    public RuntimeValue<KnativeComponent> createKnativeComponent(
-        Supplier<Vertx> vertx,
-        RuntimeValue<Router> router,
-        Handler<RoutingContext> bodyHandler) {
-
-        KnativeHttpTransport transport = new KnativeHttpTransport();
-        transport.setRouter(new VertxPlatformHttpRouter(vertx.get(), router.getValue()) {
-            @Override
-            public Handler<RoutingContext> bodyHandler() {
-                return bodyHandler;
-            }
-        });
-
-        KnativeComponent component = new KnativeComponent();
-        component.setTransport(transport);
-
-        return new RuntimeValue<>(component);
+    public RuntimeValue<KnativeComponent> createKnativeComponent() {
+        return new RuntimeValue<>(new KnativeComponent());
     }
 }
diff --git a/components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeTransport.java b/components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeConsumerFactory.java
similarity index 71%
copy from components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeTransport.java
copy to components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeConsumerFactory.java
index 40ce794..4ac824a 100644
--- a/components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeTransport.java
+++ b/components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeConsumerFactory.java
@@ -19,23 +19,9 @@ package org.apache.camel.component.knative.spi;
 import org.apache.camel.Consumer;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Processor;
-import org.apache.camel.Producer;
 import org.apache.camel.Service;
 
-public interface KnativeTransport extends Service {
-    /**
-     * Create a camel {@link Producer} in place of the original endpoint for a specific protocol.
-     *
-     * @param endpoint the endpoint for which the producer should be created
-     * @param configuration the general transport configuration
-     * @param service the service definition containing information about how make reach the target service.
-     * @return
-     */
-    Producer createProducer(
-        Endpoint endpoint,
-        KnativeTransportConfiguration configuration,
-        KnativeEnvironment.KnativeResource service);
-
+public interface KnativeConsumerFactory extends Service {
     /**
      * Create a camel {@link Consumer} in place of the original endpoint for a specific protocol.
      *
diff --git a/components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeTransport.java b/components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeProducerFactory.java
similarity index 68%
rename from components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeTransport.java
rename to components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeProducerFactory.java
index 40ce794..fc503df 100644
--- a/components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeTransport.java
+++ b/components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeProducerFactory.java
@@ -16,13 +16,11 @@
  */
 package org.apache.camel.component.knative.spi;
 
-import org.apache.camel.Consumer;
 import org.apache.camel.Endpoint;
-import org.apache.camel.Processor;
 import org.apache.camel.Producer;
 import org.apache.camel.Service;
 
-public interface KnativeTransport extends Service {
+public interface KnativeProducerFactory extends Service {
     /**
      * Create a camel {@link Producer} in place of the original endpoint for a specific protocol.
      *
@@ -35,17 +33,4 @@ public interface KnativeTransport extends Service {
         Endpoint endpoint,
         KnativeTransportConfiguration configuration,
         KnativeEnvironment.KnativeResource service);
-
-    /**
-     * Create a camel {@link Consumer} in place of the original endpoint for a specific protocol.
-     *
-     * @param endpoint the endpoint for which the consumer should be created.
-     * @param configuration the general transport configuration
-     * @param service the service definition containing information about how make the route reachable from knative.
-     * @return
-     */
-    Consumer createConsumer(
-        Endpoint endpoint,
-        KnativeTransportConfiguration configuration,
-        KnativeEnvironment.KnativeResource service, Processor processor);
 }
diff --git a/components/camel-knative/camel-knative-http/pom.xml b/components/camel-knative/camel-knative-http/pom.xml
index 6407374..80ac745 100644
--- a/components/camel-knative/camel-knative-http/pom.xml
+++ b/components/camel-knative/camel-knative-http/pom.xml
@@ -46,13 +46,14 @@
         </dependency>
 
         <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-platform-http-vertx</artifactId>
+            <groupId>io.vertx</groupId>
+            <artifactId>vertx-web-client</artifactId>
+            <version>${vertx-version}</version>
         </dependency>
 
         <dependency>
             <groupId>io.vertx</groupId>
-            <artifactId>vertx-web-client</artifactId>
+            <artifactId>vertx-web</artifactId>
             <version>${vertx-version}</version>
         </dependency>
 
@@ -95,12 +96,17 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel</groupId>
-            <artifactId>camel-http</artifactId>
+            <artifactId>camel-core-languages</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.camel</groupId>
-            <artifactId>camel-core-languages</artifactId>
+            <artifactId>camel-platform-http-vertx</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-http</artifactId>
             <scope>test</scope>
         </dependency>
 
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 d29d97e..bfc057d 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
@@ -18,17 +18,21 @@ package org.apache.camel.component.knative.http;
 
 import java.io.PrintWriter;
 import java.io.StringWriter;
+import java.math.BigInteger;
 import java.nio.charset.StandardCharsets;
 import java.util.Locale;
 import java.util.Map;
 import java.util.function.Predicate;
 
+import io.vertx.core.Handler;
 import io.vertx.core.buffer.Buffer;
 import io.vertx.core.http.HttpMethod;
 import io.vertx.core.http.HttpServerRequest;
 import io.vertx.core.http.HttpServerResponse;
 import io.vertx.ext.web.Route;
+import io.vertx.ext.web.Router;
 import io.vertx.ext.web.RoutingContext;
+import io.vertx.ext.web.handler.BodyHandler;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
@@ -37,7 +41,6 @@ import org.apache.camel.Processor;
 import org.apache.camel.TypeConverter;
 import org.apache.camel.component.knative.spi.KnativeEnvironment;
 import org.apache.camel.component.knative.spi.KnativeTransportConfiguration;
-import org.apache.camel.component.platform.http.vertx.VertxPlatformHttpRouter;
 import org.apache.camel.spi.HeaderFilterStrategy;
 import org.apache.camel.support.DefaultConsumer;
 import org.apache.camel.support.ExchangeHelper;
@@ -52,17 +55,19 @@ public class KnativeHttpConsumer extends DefaultConsumer {
     private final KnativeTransportConfiguration configuration;
     private final Predicate<HttpServerRequest> filter;
     private final KnativeEnvironment.KnativeResource serviceDefinition;
-    private final VertxPlatformHttpRouter router;
+    private final Router router;
     private final HeaderFilterStrategy headerFilterStrategy;
 
     private String basePath;
     private Route route;
+    private BigInteger maxBodySize;
+    private boolean preallocateBodyBuffer;
 
     public KnativeHttpConsumer(
         KnativeTransportConfiguration configuration,
         Endpoint endpoint,
         KnativeEnvironment.KnativeResource serviceDefinition,
-        VertxPlatformHttpRouter router,
+        Router router,
         Processor processor) {
 
         super(endpoint, processor);
@@ -72,6 +77,7 @@ public class KnativeHttpConsumer extends DefaultConsumer {
         this.router = router;
         this.headerFilterStrategy = new KnativeHttpHeaderFilterStrategy();
         this.filter = KnativeHttpSupport.createFilter(serviceDefinition);
+        this.preallocateBodyBuffer = true;
     }
 
     public String getBasePath() {
@@ -82,10 +88,29 @@ public class KnativeHttpConsumer extends DefaultConsumer {
         this.basePath = basePath;
     }
 
+    public BigInteger getMaxBodySize() {
+        return maxBodySize;
+    }
+
+    public void setMaxBodySize(BigInteger maxBodySize) {
+        this.maxBodySize = maxBodySize;
+    }
+
+    public boolean isPreallocateBodyBuffer() {
+        return preallocateBodyBuffer;
+    }
+
+    public void setPreallocateBodyBuffer(boolean preallocateBodyBuffer) {
+        this.preallocateBodyBuffer = preallocateBodyBuffer;
+    }
+
     @Override
     protected void doStart() throws Exception {
         if (route == null) {
-            String path = ObjectHelper.supplyIfEmpty(serviceDefinition.getPath(), () -> KnativeHttpTransport.DEFAULT_PATH);
+            String path = serviceDefinition.getPath();
+            if (ObjectHelper.isEmpty(path)) {
+                path = "/";
+            }
             if (ObjectHelper.isNotEmpty(basePath)) {
                 path = basePath + path;
             }
@@ -97,8 +122,20 @@ public class KnativeHttpConsumer extends DefaultConsumer {
                 path
             );
 
+            BodyHandler bodyHandler = BodyHandler.create();
+            bodyHandler.setPreallocateBodyBuffer(this.preallocateBodyBuffer);
+            if (this.maxBodySize != null) {
+                bodyHandler.setBodyLimit(this.maxBodySize.longValueExact());
+            }
+
             // add body handler
-            route.handler(router.bodyHandler());
+            route.handler(new Handler<RoutingContext>() {
+                @Override
+                public void handle(RoutingContext event) {
+                    event.request().resume();
+                    bodyHandler.handle(event);
+                }
+            });
 
             // add knative handler
             route.handler(routingContext -> {
@@ -161,7 +198,7 @@ public class KnativeHttpConsumer extends DefaultConsumer {
         // from("knative:event/my.event")
         //        .to("http://{{env:PROJECT}}.{{env:NAMESPACE}}.svc.cluster.local/service");
         //
-        router.vertx().executeBlocking(
+        routingContext.vertx().executeBlocking(
             promise -> {
                 try {
                     createUoW(exchange);
diff --git a/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpTransport.java b/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpConsumerFactory.java
similarity index 50%
copy from components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpTransport.java
copy to components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpConsumerFactory.java
index 213f2e3..9df388c 100644
--- a/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpTransport.java
+++ b/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpConsumerFactory.java
@@ -16,41 +16,30 @@
  */
 package org.apache.camel.component.knative.http;
 
-import io.vertx.ext.web.client.WebClientOptions;
+import java.util.Objects;
+
+import io.vertx.ext.web.Router;
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.Consumer;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Processor;
-import org.apache.camel.Producer;
+import org.apache.camel.component.knative.spi.KnativeConsumerFactory;
 import org.apache.camel.component.knative.spi.KnativeEnvironment;
-import org.apache.camel.component.knative.spi.KnativeTransport;
 import org.apache.camel.component.knative.spi.KnativeTransportConfiguration;
-import org.apache.camel.component.platform.http.vertx.VertxPlatformHttpRouter;
 import org.apache.camel.support.service.ServiceSupport;
 
-public class KnativeHttpTransport extends ServiceSupport implements CamelContextAware, KnativeTransport {
-    public static final int DEFAULT_PORT = 8080;
-    public static final String DEFAULT_PATH = "/";
-
-    private VertxPlatformHttpRouter router;
-    private WebClientOptions vertxHttpClientOptions;
+public class KnativeHttpConsumerFactory extends ServiceSupport implements CamelContextAware, KnativeConsumerFactory {
+    private Router router;
     private CamelContext camelContext;
 
-    public VertxPlatformHttpRouter getRouter() {
+    public Router getRouter() {
         return router;
     }
 
-    public void setRouter(VertxPlatformHttpRouter router) {
+    public KnativeHttpConsumerFactory setRouter(Router router) {
         this.router = router;
-    }
-
-    public WebClientOptions getClientOptions() {
-        return vertxHttpClientOptions;
-    }
-
-    public void setClientOptions(WebClientOptions vertxHttpClientOptions) {
-        this.vertxHttpClientOptions = vertxHttpClientOptions;
+        return this;
     }
 
     @Override
@@ -63,38 +52,16 @@ public class KnativeHttpTransport extends ServiceSupport implements CamelContext
         return camelContext;
     }
 
-    // *****************************
-    //
-    // Lifecycle
-    //
-    // *****************************
-
-    @Override
-    protected void doStart() throws Exception {
-        if (this.router == null) {
-            this.router = VertxPlatformHttpRouter.lookup(camelContext);
-        }
-    }
-
-    @Override
-    protected void doStop() throws Exception {
-        // no-op
-    }
-
-    // *****************************
-    //
-    //
-    //
-    // *****************************
-
-    @Override
-    public Producer createProducer(Endpoint endpoint, KnativeTransportConfiguration config, KnativeEnvironment.KnativeResource service) {
-        return new KnativeHttpProducer(endpoint, service, this.router.vertx(), vertxHttpClientOptions);
-    }
-
     @Override
     public Consumer createConsumer(Endpoint endpoint, KnativeTransportConfiguration config, KnativeEnvironment.KnativeResource service, Processor processor) {
-        return new KnativeHttpConsumer(config, endpoint, service, this.router, processor);
+        Objects.requireNonNull(this.router, "router");
+
+        return new KnativeHttpConsumer(
+            config,
+            endpoint,
+            service,
+            this.router,
+            processor);
     }
 
 }
diff --git a/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpTransport.java b/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpProducerFactory.java
similarity index 57%
rename from components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpTransport.java
rename to components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpProducerFactory.java
index 213f2e3..d4466b9 100644
--- a/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpTransport.java
+++ b/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpProducerFactory.java
@@ -16,33 +16,31 @@
  */
 package org.apache.camel.component.knative.http;
 
+import java.util.Objects;
+
+import io.vertx.core.Vertx;
 import io.vertx.ext.web.client.WebClientOptions;
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
-import org.apache.camel.Consumer;
 import org.apache.camel.Endpoint;
-import org.apache.camel.Processor;
 import org.apache.camel.Producer;
 import org.apache.camel.component.knative.spi.KnativeEnvironment;
-import org.apache.camel.component.knative.spi.KnativeTransport;
+import org.apache.camel.component.knative.spi.KnativeProducerFactory;
 import org.apache.camel.component.knative.spi.KnativeTransportConfiguration;
-import org.apache.camel.component.platform.http.vertx.VertxPlatformHttpRouter;
 import org.apache.camel.support.service.ServiceSupport;
 
-public class KnativeHttpTransport extends ServiceSupport implements CamelContextAware, KnativeTransport {
-    public static final int DEFAULT_PORT = 8080;
-    public static final String DEFAULT_PATH = "/";
-
-    private VertxPlatformHttpRouter router;
+public class KnativeHttpProducerFactory extends ServiceSupport implements CamelContextAware, KnativeProducerFactory {
+    private Vertx vertx;
     private WebClientOptions vertxHttpClientOptions;
     private CamelContext camelContext;
 
-    public VertxPlatformHttpRouter getRouter() {
-        return router;
+    public Vertx getVertx() {
+        return vertx;
     }
 
-    public void setRouter(VertxPlatformHttpRouter router) {
-        this.router = router;
+    public KnativeHttpProducerFactory setVertx(Vertx vertx) {
+        this.vertx = vertx;
+        return this;
     }
 
     public WebClientOptions getClientOptions() {
@@ -63,38 +61,14 @@ public class KnativeHttpTransport extends ServiceSupport implements CamelContext
         return camelContext;
     }
 
-    // *****************************
-    //
-    // Lifecycle
-    //
-    // *****************************
-
-    @Override
-    protected void doStart() throws Exception {
-        if (this.router == null) {
-            this.router = VertxPlatformHttpRouter.lookup(camelContext);
-        }
-    }
-
-    @Override
-    protected void doStop() throws Exception {
-        // no-op
-    }
-
-    // *****************************
-    //
-    //
-    //
-    // *****************************
-
     @Override
     public Producer createProducer(Endpoint endpoint, KnativeTransportConfiguration config, KnativeEnvironment.KnativeResource service) {
-        return new KnativeHttpProducer(endpoint, service, this.router.vertx(), vertxHttpClientOptions);
-    }
+        Objects.requireNonNull(this.vertx, "vertx");
 
-    @Override
-    public Consumer createConsumer(Endpoint endpoint, KnativeTransportConfiguration config, KnativeEnvironment.KnativeResource service, Processor processor) {
-        return new KnativeHttpConsumer(config, endpoint, service, this.router, processor);
+        return new KnativeHttpProducer(
+            endpoint,
+            service,
+            this.vertx,
+            this.vertxHttpClientOptions);
     }
-
 }
diff --git a/components/camel-knative/camel-knative-http/src/main/resources/META-INF/services/org/apache/camel/knative/transport/http b/components/camel-knative/camel-knative-http/src/main/resources/META-INF/services/org/apache/camel/knative/transport/http-consumer
similarity index 91%
copy from components/camel-knative/camel-knative-http/src/main/resources/META-INF/services/org/apache/camel/knative/transport/http
copy to components/camel-knative/camel-knative-http/src/main/resources/META-INF/services/org/apache/camel/knative/transport/http-consumer
index cd5c081..431636f 100644
--- a/components/camel-knative/camel-knative-http/src/main/resources/META-INF/services/org/apache/camel/knative/transport/http
+++ b/components/camel-knative/camel-knative-http/src/main/resources/META-INF/services/org/apache/camel/knative/transport/http-consumer
@@ -15,4 +15,4 @@
 # limitations under the License.
 #
 
-class = org.apache.camel.component.knative.http.KnativeHttpTransport
\ No newline at end of file
+class = org.apache.camel.component.knative.http.KnativeHttpConsumerFactory
\ No newline at end of file
diff --git a/components/camel-knative/camel-knative-http/src/main/resources/META-INF/services/org/apache/camel/knative/transport/http b/components/camel-knative/camel-knative-http/src/main/resources/META-INF/services/org/apache/camel/knative/transport/http-producer
similarity index 91%
rename from components/camel-knative/camel-knative-http/src/main/resources/META-INF/services/org/apache/camel/knative/transport/http
rename to components/camel-knative/camel-knative-http/src/main/resources/META-INF/services/org/apache/camel/knative/transport/http-producer
index cd5c081..897220c 100644
--- a/components/camel-knative/camel-knative-http/src/main/resources/META-INF/services/org/apache/camel/knative/transport/http
+++ b/components/camel-knative/camel-knative-http/src/main/resources/META-INF/services/org/apache/camel/knative/transport/http-producer
@@ -15,4 +15,4 @@
 # limitations under the License.
 #
 
-class = org.apache.camel.component.knative.http.KnativeHttpTransport
\ No newline at end of file
+class = org.apache.camel.component.knative.http.KnativeHttpProducerFactory
\ No newline at end of file
diff --git a/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTest.java b/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTest.java
index b69d97a..3e45b84 100644
--- a/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTest.java
+++ b/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTest.java
@@ -118,7 +118,8 @@ public class KnativeHttpTest {
         context.start();
 
         assertThat(context.getComponent("knative")).isInstanceOfSatisfying(KnativeComponent.class, c -> {
-            assertThat(c.getTransport()).isInstanceOf(KnativeHttpTransport.class);
+            assertThat(c.getProducerFactory()).isInstanceOf(KnativeHttpProducerFactory.class);
+            assertThat(c.getConsumerFactory()).isInstanceOf(KnativeHttpConsumerFactory.class);
         });
     }
 
@@ -1416,51 +1417,6 @@ public class KnativeHttpTest {
 
     @ParameterizedTest
     @EnumSource(CloudEvents.class)
-    void testOrdering(CloudEvent ce) throws Exception {
-        List<KnativeEnvironment.KnativeResource> hops = new Random()
-            .ints(0, 100)
-            .distinct()
-            .limit(10)
-            .mapToObj(i -> sourceEndpoint(
-                "ep-" + i,
-                Map.of(Knative.KNATIVE_FILTER_PREFIX + "MyHeader", "channel-" + i)))
-            .collect(Collectors.toList());
-
-        configureKnativeComponent(context, ce, hops);
-
-        RouteBuilder.addRoutes(context, b -> {
-            b.from("direct:start")
-                .routeId("http")
-                .toF("http://localhost:%d", platformHttpPort)
-                .convertBodyTo(String.class);
-
-            for (KnativeEnvironment.KnativeResource definition : hops) {
-                b.fromF("knative:endpoint/%s", definition.getName())
-                    .routeId(definition.getName())
-                    .setBody().constant(definition.getName());
-            }
-        });
-
-        context.start();
-
-        List<String> hopsDone = new ArrayList<>();
-        for (KnativeEnvironment.KnativeResource definition : hops) {
-            hopsDone.add(definition.getName());
-
-            Exchange result = template.request(
-                "direct:start",
-                e -> {
-                    e.getMessage().setHeader("MyHeader", hopsDone);
-                    e.getMessage().setBody(definition.getName());
-                }
-            );
-
-            assertThat(result.getMessage().getBody()).isEqualTo(definition.getName());
-        }
-    }
-
-    @ParameterizedTest
-    @EnumSource(CloudEvents.class)
     void testHeaders(CloudEvent ce) throws Exception {
         final int port = AvailablePortFinder.getNextAvailable();
         final KnativeHttpServer server = new KnativeHttpServer(context);
@@ -1515,7 +1471,6 @@ public class KnativeHttpTest {
     @ParameterizedTest
     @EnumSource(CloudEvents.class)
     void testHeadersInReply(CloudEvent ce) throws Exception {
-        final int port = AvailablePortFinder.getNextAvailable();
         final KnativeHttpServer server = new KnativeHttpServer(context);
 
         configureKnativeComponent(
@@ -1547,7 +1502,7 @@ public class KnativeHttpTest {
 
             server.start();
 
-            Exchange exchange = template.request("direct:start", e -> e.getMessage().setBody(null));
+            Exchange exchange = template.request("direct:start", e -> e.getMessage().setBody("test"));
             assertThat(exchange.getMessage().getHeaders()).containsEntry("CamelDummyHeader", "test");
         } finally {
             server.stop();
diff --git a/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTestSupport.java b/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTestSupport.java
index 5f47c00..b1e4d76 100644
--- a/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTestSupport.java
+++ b/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTestSupport.java
@@ -20,12 +20,18 @@ import java.util.Arrays;
 import java.util.List;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.Consumer;
+import org.apache.camel.Endpoint;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
 import org.apache.camel.component.knative.KnativeComponent;
 import org.apache.camel.component.knative.spi.CloudEvent;
 import org.apache.camel.component.knative.spi.KnativeEnvironment;
+import org.apache.camel.component.knative.spi.KnativeTransportConfiguration;
 import org.apache.camel.component.platform.http.PlatformHttpComponent;
 import org.apache.camel.component.platform.http.PlatformHttpConstants;
 import org.apache.camel.component.platform.http.vertx.VertxPlatformHttpEngine;
+import org.apache.camel.component.platform.http.vertx.VertxPlatformHttpRouter;
 import org.apache.camel.component.platform.http.vertx.VertxPlatformHttpServer;
 import org.apache.camel.component.platform.http.vertx.VertxPlatformHttpServerConfiguration;
 
@@ -41,6 +47,20 @@ public final class KnativeHttpTestSupport {
         KnativeComponent component = context.getComponent("knative", KnativeComponent.class);
         component.setCloudEventsSpecVersion(ce.version());
         component.setEnvironment(new KnativeEnvironment(definitions));
+        component.setConsumerFactory(new KnativeHttpConsumerFactory() {
+            @Override
+            public Consumer createConsumer(Endpoint endpoint, KnativeTransportConfiguration config, KnativeEnvironment.KnativeResource service, Processor processor) {
+                this.setRouter(VertxPlatformHttpRouter.lookup(context));
+                return super.createConsumer(endpoint, config, service, processor);
+            }
+        });
+        component.setProducerFactory(new KnativeHttpProducerFactory() {
+            @Override
+            public Producer createProducer(Endpoint endpoint, KnativeTransportConfiguration config, KnativeEnvironment.KnativeResource service) {
+                this.setVertx(VertxPlatformHttpRouter.lookup(context).vertx());
+                return super.createProducer(endpoint, config, service);
+            }
+        });
 
         return component;
     }
diff --git a/components/camel-knative/camel-knative/src/generated/java/org/apache/camel/component/knative/KnativeComponentConfigurer.java b/components/camel-knative/camel-knative/src/generated/java/org/apache/camel/component/knative/KnativeComponentConfigurer.java
index b64e482..f3eb5a1 100644
--- a/components/camel-knative/camel-knative/src/generated/java/org/apache/camel/component/knative/KnativeComponentConfigurer.java
+++ b/components/camel-knative/camel-knative/src/generated/java/org/apache/camel/component/knative/KnativeComponentConfigurer.java
@@ -22,10 +22,11 @@ public class KnativeComponentConfigurer extends PropertyConfigurerSupport implem
         map.put("cloudEventsSpecVersion", java.lang.String.class);
         map.put("cloudEventsType", java.lang.String.class);
         map.put("configuration", org.apache.camel.component.knative.KnativeConfiguration.class);
+        map.put("consumerFactory", org.apache.camel.component.knative.spi.KnativeConsumerFactory.class);
         map.put("environment", org.apache.camel.component.knative.spi.KnativeEnvironment.class);
         map.put("environmentPath", java.lang.String.class);
         map.put("filters", java.util.Map.class);
-        map.put("transport", org.apache.camel.component.knative.spi.KnativeTransport.class);
+        map.put("producerFactory", org.apache.camel.component.knative.spi.KnativeProducerFactory.class);
         map.put("transportOptions", java.util.Map.class);
         map.put("typeId", java.lang.String.class);
         map.put("bridgeErrorHandler", boolean.class);
@@ -63,6 +64,8 @@ public class KnativeComponentConfigurer extends PropertyConfigurerSupport implem
         case "cloudeventstype":
         case "cloudEventsType": getOrCreateConfiguration(target).setCloudEventsType(property(camelContext, java.lang.String.class, value)); return true;
         case "configuration": target.setConfiguration(property(camelContext, org.apache.camel.component.knative.KnativeConfiguration.class, value)); return true;
+        case "consumerfactory":
+        case "consumerFactory": target.setConsumerFactory(property(camelContext, org.apache.camel.component.knative.spi.KnativeConsumerFactory.class, value)); return true;
         case "environment": getOrCreateConfiguration(target).setEnvironment(property(camelContext, org.apache.camel.component.knative.spi.KnativeEnvironment.class, value)); return true;
         case "environmentpath":
         case "environmentPath": target.setEnvironmentPath(property(camelContext, java.lang.String.class, value)); return true;
@@ -71,10 +74,11 @@ public class KnativeComponentConfigurer extends PropertyConfigurerSupport implem
         case "lazystartproducer":
         case "lazyStartProducer": target.setLazyStartProducer(property(camelContext, boolean.class, value)); return true;
         case "name": getOrCreateConfiguration(target).setName(property(camelContext, java.lang.String.class, value)); return true;
+        case "producerfactory":
+        case "producerFactory": target.setProducerFactory(property(camelContext, org.apache.camel.component.knative.spi.KnativeProducerFactory.class, value)); return true;
         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 "transport": target.setTransport(property(camelContext, org.apache.camel.component.knative.spi.KnativeTransport.class, value)); return true;
         case "transportoptions":
         case "transportOptions": getOrCreateConfiguration(target).setTransportOptions(property(camelContext, java.util.Map.class, value)); return true;
         case "typeid":
@@ -105,6 +109,8 @@ public class KnativeComponentConfigurer extends PropertyConfigurerSupport implem
         case "cloudeventstype":
         case "cloudEventsType": return getOrCreateConfiguration(target).getCloudEventsType();
         case "configuration": return target.getConfiguration();
+        case "consumerfactory":
+        case "consumerFactory": return target.getConsumerFactory();
         case "environment": return getOrCreateConfiguration(target).getEnvironment();
         case "environmentpath":
         case "environmentPath": return target.getEnvironmentPath();
@@ -113,10 +119,11 @@ public class KnativeComponentConfigurer extends PropertyConfigurerSupport implem
         case "lazystartproducer":
         case "lazyStartProducer": return target.isLazyStartProducer();
         case "name": return getOrCreateConfiguration(target).getName();
+        case "producerfactory":
+        case "producerFactory": return target.getProducerFactory();
         case "reply": return getOrCreateConfiguration(target).getReply();
         case "replywithcloudevent":
         case "replyWithCloudEvent": return getOrCreateConfiguration(target).isReplyWithCloudEvent();
-        case "transport": return target.getTransport();
         case "transportoptions":
         case "transportOptions": return getOrCreateConfiguration(target).getTransportOptions();
         case "typeid":
diff --git a/components/camel-knative/camel-knative/src/generated/resources/org/apache/camel/component/knative/knative.json b/components/camel-knative/camel-knative/src/generated/resources/org/apache/camel/component/knative/knative.json
index 5793530..f4f9ee2 100644
--- a/components/camel-knative/camel-knative/src/generated/resources/org/apache/camel/component/knative/knative.json
+++ b/components/camel-knative/camel-knative/src/generated/resources/org/apache/camel/component/knative/knative.json
@@ -6,7 +6,7 @@
     "description": "This component allows to interact with Knative.",
     "deprecated": false,
     "firstVersion": "3.0.0",
-    "label": "cloud,eventing",
+    "label": "cloud",
     "javaType": "org.apache.camel.component.knative.KnativeComponent",
     "supportLevel": "Preview",
     "groupId": "org.apache.camel.k",
@@ -26,10 +26,11 @@
     "cloudEventsSpecVersion": { "kind": "property", "displayName": "Cloud Events Spec Version", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "enum": [ "0.1", "0.2", "0.3", "1.0" ], "deprecated": false, "secret": false, "defaultValue": "1.0", "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "Set the version of the cloudevents spec." },
     "cloudEventsType": { "kind": "property", "displayName": "Cloud Events Type", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": 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." },
     "configuration": { "kind": "property", "displayName": "Configuration", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.knative.KnativeConfiguration", "deprecated": false, "secret": false, "description": "Set the configuration." },
+    "consumerFactory": { "kind": "property", "displayName": "Consumer Factory", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.knative.spi.KnativeConsumerFactory", "deprecated": false, "secret": false, "description": "The protocol consumer factory." },
     "environment": { "kind": "property", "displayName": "Environment", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.knative.spi.KnativeEnvironment", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The environment" },
     "environmentPath": { "kind": "property", "displayName": "Environment Path", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "The path ot the environment definition" },
     "filters": { "kind": "property", "displayName": "Filters", "group": "common", "label": "", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix": "filter.", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "Set the filters." },
-    "transport": { "kind": "property", "displayName": "Transport", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.knative.spi.KnativeTransport", "deprecated": false, "secret": false, "description": "The transport implementation." },
+    "producerFactory": { "kind": "property", "displayName": "Producer Factory", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.knative.spi.KnativeProducerFactory", "deprecated": false, "secret": false, "description": "The protocol producer factory." },
     "transportOptions": { "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, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "Set the transport options." },
     "typeId": { "kind": "property", "displayName": "Type Id", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.knative.KnativeConfiguration", "configurationField": "configuration", "description": "The name of the service to lookup from the KnativeEnvironment." },
     "bridgeErrorHandler": { "kind": "property", "displayName": "Bridge Error Handler", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": false, "description": "Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by [...]
diff --git a/components/camel-knative/camel-knative/src/main/docs/knative-component.adoc b/components/camel-knative/camel-knative/src/main/docs/knative-component.adoc
index 4b0d15c..e395a94 100644
--- a/components/camel-knative/camel-knative/src/main/docs/knative-component.adoc
+++ b/components/camel-knative/camel-knative/src/main/docs/knative-component.adoc
@@ -43,7 +43,7 @@ You can append query options to the URI in the following format:
 == Options
 
 // component options: START
-The Knative component supports 17 options, which are listed below.
+The Knative component supports 18 options, which are listed below.
 
 
 
@@ -54,11 +54,12 @@ The Knative component supports 17 options, which are listed below.
 | *cloudEventsSpecVersion* (common) | Set the version of the cloudevents spec. The value can be one of: 0.1, 0.2, 0.3, 1.0 | 1.0 | String
 | *cloudEventsType* (common) | Set the event-type information of the produced events. | org.apache.camel.event | String
 | *configuration* (common) | Set the configuration. |  | KnativeConfiguration
+| *consumerFactory* (common) | The protocol consumer factory. |  | KnativeConsumerFactory
 | *environment* (common) | The environment |  | KnativeEnvironment
 | *environmentPath* (common) | The path ot the environment definition |  | String
 | *filters* (common) | Set the filters. |  | Map
+| *producerFactory* (common) | The protocol producer factory. |  | KnativeProducerFactory
 | *serviceName* (common) | The name of the service to lookup from the KnativeEnvironment. |  | String
-| *transport* (common) | The transport implementation. |  | KnativeTransport
 | *transportOptions* (common) | Set the transport options. |  | Map
 | *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
 | *replyWithCloudEvent* (consumer) | Transforms the reply into a cloud event that will be processed by the caller. When listening to events from a Knative Broker, if this flag is enabled, replies will be published to the same Broker where the request comes from (beware that if you don't change the type of the received message, you may create a loop and receive your same reply). When this flag is disabled, CloudEvent headers are removed from the reply. | false | boolean
diff --git a/components/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeComponent.java b/components/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeComponent.java
index 337626b..b2c51b7 100644
--- a/components/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeComponent.java
+++ b/components/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeComponent.java
@@ -24,8 +24,9 @@ import org.apache.camel.CamelContextAware;
 import org.apache.camel.Endpoint;
 import org.apache.camel.ExtendedCamelContext;
 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.KnativeTransport;
+import org.apache.camel.component.knative.spi.KnativeProducerFactory;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.support.DefaultComponent;
@@ -50,9 +51,12 @@ public class KnativeComponent extends DefaultComponent {
     private Knative.Protocol protocol = Knative.Protocol.http;
 
     @Metadata
-    private KnativeTransport transport;
+    private KnativeProducerFactory producerFactory;
+    @Metadata
+    private KnativeConsumerFactory consumerFactory;
 
-    private boolean managedTransport;
+    private boolean managedProducer;
+    private boolean managedConsumer;
 
     public KnativeComponent() {
         this(null);
@@ -127,15 +131,26 @@ public class KnativeComponent extends DefaultComponent {
         return this;
     }
 
-    public KnativeTransport getTransport() {
-        return transport;
+    public KnativeProducerFactory getProducerFactory() {
+        return producerFactory;
+    }
+
+    /**
+     * The protocol producer factory.
+     */
+    public void setProducerFactory(KnativeProducerFactory producerFactory) {
+        this.producerFactory = producerFactory;
+    }
+
+    public KnativeConsumerFactory getConsumerFactory() {
+        return consumerFactory;
     }
 
     /**
-     * The transport implementation.
+     * The protocol consumer factory.
      */
-    public void setTransport(KnativeTransport transport) {
-        this.transport = transport;
+    public void setConsumerFactory(KnativeConsumerFactory consumerFactory) {
+        this.consumerFactory = consumerFactory;
     }
 
     public Map<String, Object> getTransportOptions() {
@@ -159,41 +174,30 @@ public class KnativeComponent extends DefaultComponent {
     protected void doInit() throws Exception {
         super.doInit();
 
-        if (transport == null) {
-            this.transport = getCamelContext().getRegistry().lookupByNameAndType(protocol.name(), KnativeTransport.class);
-
-            if (this.transport == null) {
-                this.transport = getCamelContext()
-                    .adapt(ExtendedCamelContext.class)
-                    .getFactoryFinder(Knative.KNATIVE_TRANSPORT_RESOURCE_PATH)
-                    .newInstance(protocol.name(), KnativeTransport.class)
-                    .orElseThrow(() -> new RuntimeException("Error creating knative transport for protocol: " + protocol.name()));
-
-                if (configuration.getTransportOptions() != null) {
-                    setProperties(transport, new HashMap<>(configuration.getTransportOptions()));
-                }
+        setUpProducerFactory();
+        setUpConsumerFactory();
 
-                this.managedTransport = true;
-            }
+        if (this.producerFactory != null && managedProducer) {
+            ServiceHelper.initService(this.producerFactory);
         }
-
-        if (this.transport instanceof CamelContextAware) {
-            CamelContextAware camelContextAware = (CamelContextAware)this.transport;
-
-            if (camelContextAware.getCamelContext() == null) {
-                camelContextAware.setCamelContext(getCamelContext());
-            }
+        if (this.consumerFactory != null && managedConsumer) {
+            ServiceHelper.initService(this.consumerFactory);
         }
-
-        LOGGER.info("found knative transport: {} for protocol: {}", transport, protocol.name());
     }
 
     @Override
     protected void doStart() throws Exception {
         super.doStart();
 
-        if (this.transport != null && managedTransport) {
-            ServiceHelper.startService(this.transport);
+        if (this.producerFactory != null && managedProducer) {
+            ServiceHelper.startService(this.producerFactory);
+        }
+        if (this.consumerFactory != null && managedConsumer) {
+            ServiceHelper.startService(this.consumerFactory);
+        }
+
+        if (this.producerFactory == null && this.consumerFactory == null) {
+            throw new IllegalStateException("No prodcuer or consumer factroy have been configured");
         }
     }
 
@@ -201,8 +205,11 @@ public class KnativeComponent extends DefaultComponent {
     protected void doStop() throws Exception {
         super.doStop();
 
-        if (this.transport != null && managedTransport) {
-            ServiceHelper.stopService(this.transport);
+        if (this.producerFactory != null && managedProducer) {
+            ServiceHelper.stopService(this.producerFactory);
+        }
+        if (this.consumerFactory != null && managedConsumer) {
+            ServiceHelper.stopService(this.consumerFactory);
         }
     }
 
@@ -280,4 +287,59 @@ public class KnativeComponent extends DefaultComponent {
 
         return conf;
     }
+
+    private void setUpProducerFactory() throws Exception {
+        if (producerFactory == null) {
+            this.producerFactory = getCamelContext().getRegistry().lookupByNameAndType(protocol.name(), KnativeProducerFactory.class);
+
+            if (this.producerFactory == null) {
+                this.producerFactory = getCamelContext()
+                    .adapt(ExtendedCamelContext.class)
+                    .getFactoryFinder(Knative.KNATIVE_TRANSPORT_RESOURCE_PATH)
+                    .newInstance(protocol.name() + "-producer", KnativeProducerFactory.class)
+                    .orElse(null);
+
+                if (this.producerFactory == null) {
+                    return;
+                }
+
+                if (configuration.getTransportOptions() != null) {
+                    setProperties(producerFactory, new HashMap<>(configuration.getTransportOptions()));
+                }
+
+                this.managedProducer = true;
+
+                CamelContextAware.trySetCamelContext(this.producerFactory, getCamelContext());
+            }
+
+            LOGGER.info("found knative producer factory: {} for protocol: {}", producerFactory, protocol.name());
+        }
+    }
+
+    private void setUpConsumerFactory() throws Exception {
+        if (consumerFactory == null) {
+            this.consumerFactory = getCamelContext().getRegistry().lookupByNameAndType(protocol.name(), KnativeConsumerFactory.class);
+
+            if (this.consumerFactory == null) {
+                this.consumerFactory = getCamelContext()
+                    .adapt(ExtendedCamelContext.class)
+                    .getFactoryFinder(Knative.KNATIVE_TRANSPORT_RESOURCE_PATH)
+                    .newInstance(protocol.name() + "-consumer", KnativeConsumerFactory.class)
+                    .orElse(null);
+
+                if (this.producerFactory == null) {
+                    return;
+                }
+                if (configuration.getTransportOptions() != null) {
+                    setProperties(consumerFactory, new HashMap<>(configuration.getTransportOptions()));
+                }
+
+                this.managedConsumer = true;
+
+                CamelContextAware.trySetCamelContext(this.consumerFactory, getCamelContext());
+            }
+
+            LOGGER.info("found knative consumer factory: {} for protocol: {}", consumerFactory, protocol.name());
+        }
+    }
 }
diff --git a/components/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeEndpoint.java b/components/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeEndpoint.java
index 0b40257..ac75eda 100644
--- a/components/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeEndpoint.java
+++ b/components/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeEndpoint.java
@@ -23,6 +23,7 @@ import java.util.Optional;
 import java.util.function.Predicate;
 import java.util.stream.Stream;
 
+import org.apache.camel.Category;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
@@ -48,13 +49,14 @@ import org.apache.camel.util.ObjectHelper;
     scheme = "knative",
     syntax = "knative:type/typeId",
     title = "Knative",
-    label = "cloud,eventing")
+    category = Category.CLOUD)
 public class KnativeEndpoint extends DefaultEndpoint {
+    private final CloudEventProcessor cloudEvent;
+
     @UriPath(description = "The Knative resource type")
     private final Knative.Type type;
     @UriPath(description = "The identifier of the Knative resource")
     private final String typeId;
-    private final CloudEventProcessor cloudEvent;
     @UriParam
     private KnativeConfiguration configuration;
 
@@ -76,12 +78,13 @@ public class KnativeEndpoint extends DefaultEndpoint {
     public Producer createProducer() throws Exception {
         final KnativeEnvironment.KnativeResource service = lookupServiceDefinition(Knative.EndpointKind.sink);
         final Processor ceProcessor = cloudEvent.producer(this, service);
-        final Producer producer = getComponent().getTransport().createProducer(this, createTransportConfiguration(service), service);
+        final Producer producer = getComponent().getProducerFactory().createProducer(this, createTransportConfiguration(service), service);
 
         PropertyBindingSupport.build()
             .withCamelContext(getCamelContext())
             .withProperties(configuration.getTransportOptions())
             .withRemoveParameters(false)
+            .withMandatory(false)
             .withTarget(producer)
             .bind();
 
@@ -94,12 +97,13 @@ public class KnativeEndpoint extends DefaultEndpoint {
         final Processor ceProcessor = cloudEvent.consumer(this, service);
         final Processor replyProcessor = configuration.isReplyWithCloudEvent() ? cloudEvent.producer(this, service) : null;
         final Processor pipeline = Pipeline.newInstance(getCamelContext(), ceProcessor, processor, replyProcessor);
-        final Consumer consumer = getComponent().getTransport().createConsumer(this, createTransportConfiguration(service), service, pipeline);
+        final Consumer consumer = getComponent().getConsumerFactory().createConsumer(this, createTransportConfiguration(service), service, pipeline);
 
         PropertyBindingSupport.build()
             .withCamelContext(getCamelContext())
             .withProperties(configuration.getTransportOptions())
             .withRemoveParameters(false)
+            .withMandatory(false)
             .withTarget(consumer)
             .bind();
 
diff --git a/components/camel-knative/camel-knative/src/test/java/org/apache/camel/component/knative/KnativeComponentTest.java b/components/camel-knative/camel-knative/src/test/java/org/apache/camel/component/knative/KnativeComponentTest.java
index 5cbd7a2..0012385 100644
--- a/components/camel-knative/camel-knative/src/test/java/org/apache/camel/component/knative/KnativeComponentTest.java
+++ b/components/camel-knative/camel-knative/src/test/java/org/apache/camel/component/knative/KnativeComponentTest.java
@@ -68,7 +68,8 @@ public class KnativeComponentTest {
 
         KnativeComponent component = new KnativeComponent();
         component.setEnvironment(env);
-        component.setTransport(new KnativeTransportNoop());
+        component.setConsumerFactory(new KnativeTransportNoop());
+        component.setProducerFactory(new KnativeTransportNoop());
 
         context.getRegistry().bind("ereg", KnativeEnvironmentSupport.endpoint(Knative.EndpointKind.source, "ereg", null));
         context.getRegistry().bind("creg", KnativeEnvironmentSupport.channel(Knative.EndpointKind.source, "creg", null));
diff --git a/components/camel-knative/camel-knative/src/test/java/org/apache/camel/component/knative/KnativeTransportNoop.java b/components/camel-knative/camel-knative/src/test/java/org/apache/camel/component/knative/KnativeTransportNoop.java
index e508a64..cf46f16 100644
--- a/components/camel-knative/camel-knative/src/test/java/org/apache/camel/component/knative/KnativeTransportNoop.java
+++ b/components/camel-knative/camel-knative/src/test/java/org/apache/camel/component/knative/KnativeTransportNoop.java
@@ -21,13 +21,14 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
+import org.apache.camel.component.knative.spi.KnativeConsumerFactory;
 import org.apache.camel.component.knative.spi.KnativeEnvironment;
-import org.apache.camel.component.knative.spi.KnativeTransport;
+import org.apache.camel.component.knative.spi.KnativeProducerFactory;
 import org.apache.camel.component.knative.spi.KnativeTransportConfiguration;
 import org.apache.camel.support.DefaultConsumer;
 import org.apache.camel.support.DefaultProducer;
 
-public class KnativeTransportNoop implements KnativeTransport {
+public class KnativeTransportNoop implements KnativeConsumerFactory, KnativeProducerFactory {
     @Override
     public void start() {
     }
diff --git a/examples/knative/data/env.json b/examples/knative/data/env.json
index 3a38ef7..e335d72 100644
--- a/examples/knative/data/env.json
+++ b/examples/knative/data/env.json
@@ -3,16 +3,13 @@
       {
         "type": "endpoint",
         "name": "sink",
-        "host": "0.0.0.0",
-        "port": 9091,
+        "url": "http://localhost:9091",
         "metadata": {
           "camel.endpoint.kind": "sink"
         }
       }, {
         "type": "endpoint",
         "name": "source",
-        "host": "0.0.0.0",
-        "port": 9090,
         "metadata": {
           "camel.endpoint.kind": "source"
         }
diff --git a/examples/knative/data/routes.yaml b/examples/knative/data/routes.yaml
index 31bda66..c887d5e 100644
--- a/examples/knative/data/routes.yaml
+++ b/examples/knative/data/routes.yaml
@@ -20,14 +20,15 @@
     group: "routes"
     from:
       uri: "knative://endpoint/source"
-      steps:
-        - convert-body-to:
-            type: "java.lang.String"
-        - choice:
-            when:
-              - simple: "${body} >= 100"
-                steps:
-                  - to: "log:when"
-            otherwise:
+    steps:
+      - convert-body-to:
+          type: "java.lang.String"
+      - choice:
+          when:
+            - simple: "${body} >= 100"
               steps:
-                - to: "log:otherwise"
\ No newline at end of file
+                - to: "log:when"
+          otherwise:
+            steps:
+              - to: "log:otherwise"
+
diff --git a/examples/knative/pom.xml b/examples/knative/pom.xml
index 1ed475a..3b0d664 100644
--- a/examples/knative/pom.xml
+++ b/examples/knative/pom.xml
@@ -44,12 +44,20 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel.k</groupId>
+            <artifactId>camel-k-knative-consumer</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.k</groupId>
             <artifactId>camel-k-loader-yaml</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-log</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-timer</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/itests/camel-k-itests-knative-sinkbinding/pom.xml b/itests/camel-k-itests-knative-consumer/pom.xml
similarity index 94%
copy from itests/camel-k-itests-knative-sinkbinding/pom.xml
copy to itests/camel-k-itests-knative-consumer/pom.xml
index bc28467..3fb74ca 100644
--- a/itests/camel-k-itests-knative-sinkbinding/pom.xml
+++ b/itests/camel-k-itests-knative-consumer/pom.xml
@@ -25,7 +25,7 @@
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>camel-k-itests-knative-sinkbinding</artifactId>
+    <artifactId>camel-k-itests-knative-consumer</artifactId>
 
     <dependencies>
         <dependency>
@@ -38,16 +38,11 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel.k</groupId>
-            <artifactId>camel-k-loader-yaml</artifactId>
+            <artifactId>camel-k-knative-consumer</artifactId>
         </dependency>
 
         <!-- camel quarkus -->
         <dependency>
-            <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-direct</artifactId>
-        </dependency>
-
-        <dependency>
             <groupId>io.quarkus</groupId>
             <artifactId>quarkus-jsonb</artifactId>
         </dependency>
@@ -80,7 +75,7 @@
         <!-- The following dependencies guarantee that this module is built after them.  -->
         <dependency>
             <groupId>org.apache.camel.k</groupId>
-            <artifactId>camel-k-runtime</artifactId>
+            <artifactId>camel-k-runtime-deployment</artifactId>
             <version>${project.version}</version>
             <type>pom</type>
             <scope>test</scope>
@@ -93,7 +88,7 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel.k</groupId>
-            <artifactId>camel-k-knative</artifactId>
+            <artifactId>camel-k-knative-deployment</artifactId>
             <version>${project.version}</version>
             <type>pom</type>
             <scope>test</scope>
@@ -106,7 +101,7 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel.k</groupId>
-            <artifactId>camel-k-loader-yaml</artifactId>
+            <artifactId>camel-k-knative-consumer-deployment</artifactId>
             <version>${project.version}</version>
             <type>pom</type>
             <scope>test</scope>
diff --git a/itests/camel-k-itests-knative-consumer/src/main/java/org/apache/camel/k/quarkus/it/KnativeConsumerApplication.java b/itests/camel-k-itests-knative-consumer/src/main/java/org/apache/camel/k/quarkus/it/KnativeConsumerApplication.java
new file mode 100644
index 0000000..87c63ee
--- /dev/null
+++ b/itests/camel-k-itests-knative-consumer/src/main/java/org/apache/camel/k/quarkus/it/KnativeConsumerApplication.java
@@ -0,0 +1,53 @@
+/*
+ * 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.k.quarkus.it;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+import javax.json.Json;
+import javax.json.JsonObject;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.knative.KnativeComponent;
+
+@Path("/test")
+@ApplicationScoped
+public class KnativeConsumerApplication {
+    @Inject
+    CamelContext context;
+
+    @GET
+    @Path("/inspect")
+    @Produces(MediaType.APPLICATION_JSON)
+    public JsonObject inspect() {
+        var component = context.getComponent("knative", KnativeComponent.class);
+        var builder = Json.createObjectBuilder();
+
+        if (component.getProducerFactory() != null) {
+             builder.add("producer-factory", component.getProducerFactory().getClass().getName());
+        }
+        if (component.getConsumerFactory() != null) {
+            builder.add("consumer-factory", component.getConsumerFactory().getClass().getName());
+        }
+
+        return builder.build();
+    }
+}
diff --git a/itests/camel-k-itests-runtime-yaml/src/main/resources/application.properties b/itests/camel-k-itests-knative-consumer/src/main/resources/application.properties
similarity index 96%
copy from itests/camel-k-itests-runtime-yaml/src/main/resources/application.properties
copy to itests/camel-k-itests-knative-consumer/src/main/resources/application.properties
index db0d5c9..3ce5493 100644
--- a/itests/camel-k-itests-runtime-yaml/src/main/resources/application.properties
+++ b/itests/camel-k-itests-knative-consumer/src/main/resources/application.properties
@@ -18,5 +18,6 @@
 #
 # Quarkus
 #
-quarkus.log.console.enable = true
+quarkus.log.console.enable = false
 quarkus.banner.enabled     = false
+
diff --git a/camel-k-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/Feature.java b/itests/camel-k-itests-knative-consumer/src/test/java/org/apache/camel/k/quarkus/it/KnativeConsumerIT.java
similarity index 69%
copy from camel-k-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/Feature.java
copy to itests/camel-k-itests-knative-consumer/src/test/java/org/apache/camel/k/quarkus/it/KnativeConsumerIT.java
index a3db07c..e5725b1 100644
--- a/camel-k-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/Feature.java
+++ b/itests/camel-k-itests-knative-consumer/src/test/java/org/apache/camel/k/quarkus/it/KnativeConsumerIT.java
@@ -14,16 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.k.quarkus.knative.deployment;
+package org.apache.camel.k.quarkus.it;
 
-import io.quarkus.deployment.annotations.BuildStep;
-import io.quarkus.deployment.builditem.FeatureBuildItem;
+import io.quarkus.test.junit.NativeImageTest;
 
-public class Feature {
-    private static final String FEATURE = "camel-k-runtime-knative";
-
-    @BuildStep
-    FeatureBuildItem feature() {
-        return new FeatureBuildItem(FEATURE);
-    }
-}
+@NativeImageTest
+public class KnativeConsumerIT extends KnativeConsumerTest {
+}
\ No newline at end of file
diff --git a/itests/camel-k-itests-knative-consumer/src/test/java/org/apache/camel/k/quarkus/it/KnativeConsumerTest.java b/itests/camel-k-itests-knative-consumer/src/test/java/org/apache/camel/k/quarkus/it/KnativeConsumerTest.java
new file mode 100644
index 0000000..65372ce
--- /dev/null
+++ b/itests/camel-k-itests-knative-consumer/src/test/java/org/apache/camel/k/quarkus/it/KnativeConsumerTest.java
@@ -0,0 +1,48 @@
+/*
+ * 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.k.quarkus.it;
+
+import javax.ws.rs.core.MediaType;
+
+import io.quarkus.test.junit.QuarkusTest;
+import io.restassured.RestAssured;
+import io.restassured.path.json.JsonPath;
+import org.apache.camel.component.knative.http.KnativeHttpConsumerFactory;
+import org.junit.jupiter.api.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@QuarkusTest
+public class KnativeConsumerTest {
+    @Test
+    public void inspect() {
+        JsonPath p = RestAssured.given()
+            .contentType(MediaType.TEXT_PLAIN)
+            .accept(MediaType.APPLICATION_JSON)
+            .get("/test/inspect")
+            .then()
+                .statusCode(200)
+                .extract()
+                .body()
+                .jsonPath();
+
+        assertThat(p.getString("consumer-factory"))
+            .isEqualTo(KnativeHttpConsumerFactory.class.getName());
+        assertThat(p.getString("producer-factory"))
+            .isNullOrEmpty();
+    }
+}
\ No newline at end of file
diff --git a/itests/camel-k-itests-knative-sinkbinding/pom.xml b/itests/camel-k-itests-knative-producer/pom.xml
similarity index 94%
copy from itests/camel-k-itests-knative-sinkbinding/pom.xml
copy to itests/camel-k-itests-knative-producer/pom.xml
index bc28467..1507b90 100644
--- a/itests/camel-k-itests-knative-sinkbinding/pom.xml
+++ b/itests/camel-k-itests-knative-producer/pom.xml
@@ -25,7 +25,7 @@
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>camel-k-itests-knative-sinkbinding</artifactId>
+    <artifactId>camel-k-itests-knative-producer</artifactId>
 
     <dependencies>
         <dependency>
@@ -38,16 +38,11 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel.k</groupId>
-            <artifactId>camel-k-loader-yaml</artifactId>
+            <artifactId>camel-k-knative-producer</artifactId>
         </dependency>
 
         <!-- camel quarkus -->
         <dependency>
-            <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-direct</artifactId>
-        </dependency>
-
-        <dependency>
             <groupId>io.quarkus</groupId>
             <artifactId>quarkus-jsonb</artifactId>
         </dependency>
@@ -80,7 +75,7 @@
         <!-- The following dependencies guarantee that this module is built after them.  -->
         <dependency>
             <groupId>org.apache.camel.k</groupId>
-            <artifactId>camel-k-runtime</artifactId>
+            <artifactId>camel-k-runtime-deployment</artifactId>
             <version>${project.version}</version>
             <type>pom</type>
             <scope>test</scope>
@@ -93,7 +88,7 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel.k</groupId>
-            <artifactId>camel-k-knative</artifactId>
+            <artifactId>camel-k-knative-deployment</artifactId>
             <version>${project.version}</version>
             <type>pom</type>
             <scope>test</scope>
@@ -106,7 +101,7 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel.k</groupId>
-            <artifactId>camel-k-loader-yaml</artifactId>
+            <artifactId>camel-k-knative-producer-deployment</artifactId>
             <version>${project.version}</version>
             <type>pom</type>
             <scope>test</scope>
diff --git a/itests/camel-k-itests-knative-producer/src/main/java/org/apache/camel/k/quarkus/it/KnativeProducerApplication.java b/itests/camel-k-itests-knative-producer/src/main/java/org/apache/camel/k/quarkus/it/KnativeProducerApplication.java
new file mode 100644
index 0000000..32c28b3
--- /dev/null
+++ b/itests/camel-k-itests-knative-producer/src/main/java/org/apache/camel/k/quarkus/it/KnativeProducerApplication.java
@@ -0,0 +1,53 @@
+/*
+ * 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.k.quarkus.it;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+import javax.json.Json;
+import javax.json.JsonObject;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.knative.KnativeComponent;
+
+@Path("/test")
+@ApplicationScoped
+public class KnativeProducerApplication {
+    @Inject
+    CamelContext context;
+
+    @GET
+    @Path("/inspect")
+    @Produces(MediaType.APPLICATION_JSON)
+    public JsonObject inspect() {
+        var component = context.getComponent("knative", KnativeComponent.class);
+        var builder = Json.createObjectBuilder();
+
+        if (component.getProducerFactory() != null) {
+             builder.add("producer-factory", component.getProducerFactory().getClass().getName());
+        }
+        if (component.getConsumerFactory() != null) {
+            builder.add("consumer-factory", component.getConsumerFactory().getClass().getName());
+        }
+
+        return builder.build();
+    }
+}
diff --git a/itests/camel-k-itests-runtime-yaml/src/main/resources/application.properties b/itests/camel-k-itests-knative-producer/src/main/resources/application.properties
similarity index 96%
copy from itests/camel-k-itests-runtime-yaml/src/main/resources/application.properties
copy to itests/camel-k-itests-knative-producer/src/main/resources/application.properties
index db0d5c9..3ce5493 100644
--- a/itests/camel-k-itests-runtime-yaml/src/main/resources/application.properties
+++ b/itests/camel-k-itests-knative-producer/src/main/resources/application.properties
@@ -18,5 +18,6 @@
 #
 # Quarkus
 #
-quarkus.log.console.enable = true
+quarkus.log.console.enable = false
 quarkus.banner.enabled     = false
+
diff --git a/camel-k-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/Feature.java b/itests/camel-k-itests-knative-producer/src/test/java/org/apache/camel/k/quarkus/it/KnativeProducerIT.java
similarity index 69%
rename from camel-k-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/Feature.java
rename to itests/camel-k-itests-knative-producer/src/test/java/org/apache/camel/k/quarkus/it/KnativeProducerIT.java
index a3db07c..4606c20 100644
--- a/camel-k-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/Feature.java
+++ b/itests/camel-k-itests-knative-producer/src/test/java/org/apache/camel/k/quarkus/it/KnativeProducerIT.java
@@ -14,16 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.k.quarkus.knative.deployment;
+package org.apache.camel.k.quarkus.it;
 
-import io.quarkus.deployment.annotations.BuildStep;
-import io.quarkus.deployment.builditem.FeatureBuildItem;
+import io.quarkus.test.junit.NativeImageTest;
 
-public class Feature {
-    private static final String FEATURE = "camel-k-runtime-knative";
-
-    @BuildStep
-    FeatureBuildItem feature() {
-        return new FeatureBuildItem(FEATURE);
-    }
-}
+@NativeImageTest
+public class KnativeProducerIT extends KnativeProducerTest {
+}
\ No newline at end of file
diff --git a/itests/camel-k-itests-knative-producer/src/test/java/org/apache/camel/k/quarkus/it/KnativeProducerTest.java b/itests/camel-k-itests-knative-producer/src/test/java/org/apache/camel/k/quarkus/it/KnativeProducerTest.java
new file mode 100644
index 0000000..eecc230
--- /dev/null
+++ b/itests/camel-k-itests-knative-producer/src/test/java/org/apache/camel/k/quarkus/it/KnativeProducerTest.java
@@ -0,0 +1,48 @@
+/*
+ * 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.k.quarkus.it;
+
+import javax.ws.rs.core.MediaType;
+
+import io.quarkus.test.junit.QuarkusTest;
+import io.restassured.RestAssured;
+import io.restassured.path.json.JsonPath;
+import org.apache.camel.component.knative.http.KnativeHttpProducerFactory;
+import org.junit.jupiter.api.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@QuarkusTest
+public class KnativeProducerTest {
+    @Test
+    public void inspect() {
+        JsonPath p = RestAssured.given()
+            .contentType(MediaType.TEXT_PLAIN)
+            .accept(MediaType.APPLICATION_JSON)
+            .get("/test/inspect")
+            .then()
+                .statusCode(200)
+                .extract()
+                .body()
+                .jsonPath();
+
+        assertThat(p.getString("consumer-factory"))
+            .isNullOrEmpty();
+        assertThat(p.getString("producer-factory"))
+            .isEqualTo(KnativeHttpProducerFactory.class.getName());
+    }
+}
\ No newline at end of file
diff --git a/itests/camel-k-itests-knative-sinkbinding/pom.xml b/itests/camel-k-itests-knative-sinkbinding/pom.xml
index bc28467..0a7786a 100644
--- a/itests/camel-k-itests-knative-sinkbinding/pom.xml
+++ b/itests/camel-k-itests-knative-sinkbinding/pom.xml
@@ -38,6 +38,14 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel.k</groupId>
+            <artifactId>camel-k-knative-producer</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.k</groupId>
+            <artifactId>camel-k-knative-consumer</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.k</groupId>
             <artifactId>camel-k-loader-yaml</artifactId>
         </dependency>
 
diff --git a/itests/camel-k-itests-knative-source-groovy/pom.xml b/itests/camel-k-itests-knative-source-groovy/pom.xml
index 05d7e51..7ab4e7f 100644
--- a/itests/camel-k-itests-knative-source-groovy/pom.xml
+++ b/itests/camel-k-itests-knative-source-groovy/pom.xml
@@ -38,6 +38,14 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel.k</groupId>
+            <artifactId>camel-k-knative-producer</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.k</groupId>
+            <artifactId>camel-k-knative-consumer</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.k</groupId>
             <artifactId>camel-k-loader-groovy</artifactId>
         </dependency>
 
diff --git a/itests/camel-k-itests-knative-source-java/pom.xml b/itests/camel-k-itests-knative-source-java/pom.xml
index 7e6694e..80efd88 100644
--- a/itests/camel-k-itests-knative-source-java/pom.xml
+++ b/itests/camel-k-itests-knative-source-java/pom.xml
@@ -38,6 +38,14 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel.k</groupId>
+            <artifactId>camel-k-knative-producer</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.k</groupId>
+            <artifactId>camel-k-knative-consumer</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.k</groupId>
             <artifactId>camel-k-loader-java</artifactId>
         </dependency>
 
diff --git a/itests/camel-k-itests-knative-source-js/pom.xml b/itests/camel-k-itests-knative-source-js/pom.xml
index e606814..3972112 100644
--- a/itests/camel-k-itests-knative-source-js/pom.xml
+++ b/itests/camel-k-itests-knative-source-js/pom.xml
@@ -38,6 +38,14 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel.k</groupId>
+            <artifactId>camel-k-knative-producer</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.k</groupId>
+            <artifactId>camel-k-knative-consumer</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.k</groupId>
             <artifactId>camel-k-loader-js</artifactId>
         </dependency>
 
diff --git a/itests/camel-k-itests-knative-source-xml/pom.xml b/itests/camel-k-itests-knative-source-xml/pom.xml
index 7756cd8..d1a4053 100644
--- a/itests/camel-k-itests-knative-source-xml/pom.xml
+++ b/itests/camel-k-itests-knative-source-xml/pom.xml
@@ -38,6 +38,14 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel.k</groupId>
+            <artifactId>camel-k-knative-producer</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.k</groupId>
+            <artifactId>camel-k-knative-consumer</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.k</groupId>
             <artifactId>camel-k-loader-xml</artifactId>
         </dependency>
 
diff --git a/itests/camel-k-itests-knative-source-yaml/pom.xml b/itests/camel-k-itests-knative-source-yaml/pom.xml
index fca2d08..78ba1e7 100644
--- a/itests/camel-k-itests-knative-source-yaml/pom.xml
+++ b/itests/camel-k-itests-knative-source-yaml/pom.xml
@@ -38,6 +38,14 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel.k</groupId>
+            <artifactId>camel-k-knative-producer</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.k</groupId>
+            <artifactId>camel-k-knative-consumer</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.k</groupId>
             <artifactId>camel-k-loader-yaml</artifactId>
         </dependency>
 
diff --git a/itests/camel-k-itests-knative/pom.xml b/itests/camel-k-itests-knative/pom.xml
index baba539..e4c5b46 100644
--- a/itests/camel-k-itests-knative/pom.xml
+++ b/itests/camel-k-itests-knative/pom.xml
@@ -38,6 +38,14 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel.k</groupId>
+            <artifactId>camel-k-knative-producer</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.k</groupId>
+            <artifactId>camel-k-knative-consumer</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.k</groupId>
             <artifactId>camel-k-loader-yaml</artifactId>
         </dependency>
 
diff --git a/itests/camel-k-itests-knative/src/main/java/org/apache/camel/k/quarkus/it/KnativeApplication.java b/itests/camel-k-itests-knative/src/main/java/org/apache/camel/k/quarkus/it/KnativeApplication.java
index 7ee97b6..5141035 100644
--- a/itests/camel-k-itests-knative/src/main/java/org/apache/camel/k/quarkus/it/KnativeApplication.java
+++ b/itests/camel-k-itests-knative/src/main/java/org/apache/camel/k/quarkus/it/KnativeApplication.java
@@ -32,6 +32,7 @@ import javax.ws.rs.core.MediaType;
 import io.quarkus.runtime.annotations.RegisterForReflection;
 import org.apache.camel.CamelContext;
 import org.apache.camel.FluentProducerTemplate;
+import org.apache.camel.component.knative.KnativeComponent;
 import org.apache.camel.component.knative.KnativeEndpoint;
 import org.apache.camel.component.knative.spi.Knative;
 import org.apache.camel.component.knative.spi.KnativeEnvironment;
@@ -61,6 +62,11 @@ public class KnativeApplication {
 
         return Json.createObjectBuilder()
             .add("env-meta", envMeta)
+            .add("component", Json.createObjectBuilder()
+                .add("producer-factory", context.getComponent("knative", KnativeComponent.class).getProducerFactory().getClass().getName())
+                .add("consumer-factory", context.getComponent("knative", KnativeComponent.class).getConsumerFactory().getClass().getName())
+                .add("", "")
+                .build())
             .build();
     }
 
diff --git a/itests/camel-k-itests-knative/src/test/java/org/apache/camel/k/quarkus/it/KnativeTest.java b/itests/camel-k-itests-knative/src/test/java/org/apache/camel/k/quarkus/it/KnativeTest.java
index 7b8e933..07cbc49 100644
--- a/itests/camel-k-itests-knative/src/test/java/org/apache/camel/k/quarkus/it/KnativeTest.java
+++ b/itests/camel-k-itests-knative/src/test/java/org/apache/camel/k/quarkus/it/KnativeTest.java
@@ -25,6 +25,8 @@ import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
 import io.restassured.path.json.JsonPath;
 import org.apache.camel.Exchange;
+import org.apache.camel.component.knative.http.KnativeHttpConsumerFactory;
+import org.apache.camel.component.knative.http.KnativeHttpProducerFactory;
 import org.apache.camel.component.knative.spi.CloudEvent;
 import org.apache.camel.component.knative.spi.CloudEvents;
 import org.apache.camel.component.knative.spi.Knative;
@@ -53,6 +55,12 @@ public class KnativeTest {
             .containsEntry(Knative.KNATIVE_EVENT_TYPE, "camel.k.evt")
             .containsEntry(Knative.SERVICE_META_PATH, "/knative")
             .containsEntry("camel.endpoint.kind", "source");
+
+
+        assertThat(p.getString("component.consumer-factory"))
+            .isEqualTo(KnativeHttpConsumerFactory.class.getName());
+        assertThat(p.getString("component.producer-factory"))
+            .isEqualTo(KnativeHttpProducerFactory.class.getName());
     }
 
     @Test
diff --git a/itests/camel-k-itests-runtime-yaml/pom.xml b/itests/camel-k-itests-runtime-yaml/pom.xml
index d57b9c0..97a0e12 100644
--- a/itests/camel-k-itests-runtime-yaml/pom.xml
+++ b/itests/camel-k-itests-runtime-yaml/pom.xml
@@ -42,6 +42,14 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel.k</groupId>
+            <artifactId>camel-k-knative-producer</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.k</groupId>
+            <artifactId>camel-k-knative-consumer</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.k</groupId>
             <artifactId>camel-k-itests-runtime-inspector</artifactId>
         </dependency>
 
@@ -136,6 +144,32 @@
                 </exclusion>
             </exclusions>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel.k</groupId>
+            <artifactId>camel-k-knative-producer-deployment</artifactId>
+            <version>${project.version}</version>
+            <type>pom</type>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>*</groupId>
+                    <artifactId>*</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.k</groupId>
+            <artifactId>camel-k-knative-consumer-deployment</artifactId>
+            <version>${project.version}</version>
+            <type>pom</type>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>*</groupId>
+                    <artifactId>*</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
     </dependencies>
 
 
diff --git a/itests/camel-k-itests-runtime-yaml/src/main/resources/application.properties b/itests/camel-k-itests-runtime-yaml/src/main/resources/application.properties
index db0d5c9..0d67e06 100644
--- a/itests/camel-k-itests-runtime-yaml/src/main/resources/application.properties
+++ b/itests/camel-k-itests-runtime-yaml/src/main/resources/application.properties
@@ -18,5 +18,5 @@
 #
 # Quarkus
 #
-quarkus.log.console.enable = true
+quarkus.log.console.enable = false
 quarkus.banner.enabled     = false
diff --git a/itests/pom.xml b/itests/pom.xml
index 0b43e33..2b7d1ad 100644
--- a/itests/pom.xml
+++ b/itests/pom.xml
@@ -46,6 +46,8 @@
         <module>camel-k-itests-cron</module>
         <module>camel-k-itests-master</module>
         <module>camel-k-itests-knative</module>
+        <module>camel-k-itests-knative-producer</module>
+        <module>camel-k-itests-knative-consumer</module>
         <module>camel-k-itests-knative-sinkbinding</module>
         <module>camel-k-itests-knative-source-groovy</module>
         <module>camel-k-itests-knative-source-java</module>
diff --git a/pom.xml b/pom.xml
index e3486e8..51a0a7c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -475,6 +475,26 @@
             </dependency>
             <dependency>
                 <groupId>org.apache.camel.k</groupId>
+                <artifactId>camel-k-knative-producer</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.camel.k</groupId>
+                <artifactId>camel-k-knative-producer-deployment</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.camel.k</groupId>
+                <artifactId>camel-k-knative-consumer</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.camel.k</groupId>
+                <artifactId>camel-k-knative-consumer-deployment</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.camel.k</groupId>
                 <artifactId>camel-k-cron-impl</artifactId>
                 <version>${project.version}</version>
             </dependency>
diff --git a/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelArtifact.java b/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelArtifact.java
index f3ad876..7cce932 100644
--- a/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelArtifact.java
+++ b/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelArtifact.java
@@ -64,6 +64,13 @@ public interface CamelArtifact extends Artifact {
         return Collections.emptySet();
     }
 
+    static Builder from(String groupId, String artifactId) {
+        return new Builder().groupId(groupId).artifactId(artifactId);
+    }
+
     class Builder extends ImmutableCamelArtifact.Builder {
+        public Builder addDependency(String groupId, String artifactId) {
+            return super.addDependencies(MavenArtifact.from(groupId, artifactId));
+        }
     }
 }
diff --git a/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelScheme.java b/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelScheme.java
index 5d33bf5..fea0a29 100644
--- a/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelScheme.java
+++ b/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelScheme.java
@@ -16,6 +16,10 @@
  */
 package org.apache.camel.k.catalog.model;
 
+import java.util.Collections;
+import java.util.Optional;
+import java.util.Set;
+
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import org.immutables.value.Value;
 
@@ -36,6 +40,18 @@ public interface CamelScheme {
         return false;
     }
 
+    @Value.Auxiliary
+    @Value.Default
+    default Set<String> getRequiredCapabilities() {
+        return Collections.emptySet();
+    }
+
+    @Value.Auxiliary
+    Optional<CamelScopedArtifact> getProducer();
+
+    @Value.Auxiliary
+    Optional<CamelScopedArtifact> getConsumer();
+
     class Builder extends ImmutableCamelScheme.Builder {
     }
 }
diff --git a/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelArtifact.java b/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelScopedArtifact.java
similarity index 63%
copy from support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelArtifact.java
copy to support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelScopedArtifact.java
index f3ad876..a72429b 100644
--- a/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelArtifact.java
+++ b/support/camel-k-catalog-model/src/main/java/org/apache/camel/k/catalog/model/CamelScopedArtifact.java
@@ -25,27 +25,9 @@ import org.immutables.value.Value;
 
 @Value.Immutable
 @Value.Style(depluralize = true)
-@JsonDeserialize(builder = CamelArtifact.Builder.class)
-@JsonPropertyOrder({"groupId", "artifactId", "version"})
-public interface CamelArtifact extends Artifact {
-    @Value.Auxiliary
-    @Value.Default
-    default Set<CamelScheme> getSchemes() {
-        return Collections.emptySet();
-    }
-
-    @Value.Auxiliary
-    @Value.Default
-    default Set<String> getLanguages() {
-        return Collections.emptySet();
-    }
-
-    @Value.Auxiliary
-    @Value.Default
-    default Set<String> getDataformats() {
-        return Collections.emptySet();
-    }
-
+@JsonDeserialize(builder = CamelScopedArtifact.Builder.class)
+@JsonPropertyOrder({"dependencies", "required-capabilities"})
+public interface CamelScopedArtifact {
     @Value.Auxiliary
     @Value.Default
     default Set<Artifact> getDependencies() {
@@ -54,16 +36,13 @@ public interface CamelArtifact extends Artifact {
 
     @Value.Auxiliary
     @Value.Default
-    default Set<Artifact> getExclusions() {
-        return Collections.emptySet();
-    }
-
-    @Value.Auxiliary
-    @Value.Default
-    default Set<String> getJavaTypes() {
+    default Set<String> getRequiredCapabilities() {
         return Collections.emptySet();
     }
 
-    class Builder extends ImmutableCamelArtifact.Builder {
+    class Builder extends ImmutableCamelScopedArtifact.Builder {
+        public Builder addDependency(String groupId, String artifactId) {
+            return super.addDependencies(MavenArtifact.from(groupId, artifactId));
+        }
     }
 }
diff --git a/support/camel-k-maven-plugin/src/it/generate-catalog/verify.groovy b/support/camel-k-maven-plugin/src/it/generate-catalog/verify.groovy
index 55919b1..c9b9635 100644
--- a/support/camel-k-maven-plugin/src/it/generate-catalog/verify.groovy
+++ b/support/camel-k-maven-plugin/src/it/generate-catalog/verify.groovy
@@ -48,23 +48,44 @@ new File(basedir, "catalog.yaml").withReader {
 
     catalog.spec.artifacts['camel-k-knative'].with {
         assert dependencies == null
+        assert requiredCapabilities == null
         assert schemes.size() == 1
-        assert schemes[0].id == 'knative'
+
+        schemes[0].with {
+            assert id == 'knative'
+            assert consumer.requiredCapabilities == null
+            assert consumer.dependencies[0].groupId == 'org.apache.camel.k'
+            assert consumer.dependencies[0].artifactId == 'camel-k-knative-consumer'
+
+            assert producer.requiredCapabilities == null
+            assert producer.dependencies[0].groupId == 'org.apache.camel.k'
+            assert producer.dependencies[0].artifactId == 'camel-k-knative-producer'
+        }
     }
 
     catalog.spec.artifacts['camel-k-kamelet'].with {
         assert dependencies == null
+        assert requiredCapabilities == null
+
         assert schemes.size() == 1
-        assert schemes[0].id == 'kamelet'
-        assert schemes[0].passive == true
-        assert schemes[0].http == false
+
+        schemes[0].with {
+            assert id == 'kamelet'
+            assert passive == true
+            assert http == false
+        }
     }
 
     catalog.spec.artifacts['camel-k-wrap'].with {
         assert dependencies == null
+        assert requiredCapabilities == null
+
         assert schemes.size() == 1
-        assert schemes[0].id == 'wrap'
-        assert schemes[0].passive == false
-        assert schemes[0].http == false
+
+        schemes[0].with {
+            assert id == 'wrap'
+            assert passive == false
+            assert http == false
+        }
     }
 }
\ No newline at end of file
diff --git a/support/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/processors/CatalogProcessor3x.java b/support/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/processors/CatalogProcessor3x.java
index fe0ba8c..e9f9439 100644
--- a/support/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/processors/CatalogProcessor3x.java
+++ b/support/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/processors/CatalogProcessor3x.java
@@ -27,12 +27,12 @@ import org.apache.camel.catalog.CamelCatalog;
 import org.apache.camel.k.catalog.model.CamelArtifact;
 import org.apache.camel.k.catalog.model.CamelLoader;
 import org.apache.camel.k.catalog.model.CamelScheme;
+import org.apache.camel.k.catalog.model.CamelScopedArtifact;
 import org.apache.camel.k.catalog.model.CatalogComponentDefinition;
 import org.apache.camel.k.catalog.model.CatalogDataFormatDefinition;
 import org.apache.camel.k.catalog.model.CatalogDefinition;
 import org.apache.camel.k.catalog.model.CatalogLanguageDefinition;
 import org.apache.camel.k.catalog.model.CatalogSupport;
-import org.apache.camel.k.catalog.model.MavenArtifact;
 import org.apache.camel.k.catalog.model.k8s.crd.CamelCatalogSpec;
 import org.apache.camel.k.tooling.maven.support.CatalogProcessor;
 import org.apache.commons.lang3.StringUtils;
@@ -103,7 +103,7 @@ public class CatalogProcessor3x implements CatalogProcessor {
         artifacts.computeIfPresent("camel-http",
             (key, artifact) -> new CamelArtifact.Builder()
                 .from(artifact)
-                .addDependencies(MavenArtifact.from("org.apache.camel", "camel-file"))
+                .addDependency("org.apache.camel", "camel-file")
                 .build()
         );
 
@@ -135,6 +135,12 @@ public class CatalogProcessor3x implements CatalogProcessor {
                 .addScheme(new CamelScheme.Builder()
                     .id("knative")
                     .http(true)
+                    .consumer(new CamelScopedArtifact.Builder()
+                        .addDependency("org.apache.camel.k", "camel-k-knative-consumer")
+                        .build())
+                    .producer(new CamelScopedArtifact.Builder()
+                        .addDependency("org.apache.camel.k", "camel-k-knative-producer")
+                        .build())
                     .build())
                 .build()
         );
diff --git a/support/camel-k-runtime-bom/pom.xml b/support/camel-k-runtime-bom/pom.xml
index c6c26dc..f174dd0 100644
--- a/support/camel-k-runtime-bom/pom.xml
+++ b/support/camel-k-runtime-bom/pom.xml
@@ -162,6 +162,16 @@
             </dependency>
             <dependency>
                 <groupId>org.apache.camel.k</groupId>
+                <artifactId>camel-k-knative-producer</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.camel.k</groupId>
+                <artifactId>camel-k-knative-consumer</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.camel.k</groupId>
                 <artifactId>camel-k-cron-impl</artifactId>
                 <version>${project.version}</version>
             </dependency>