// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
= image:kamelets/mqtt-source.svg[] MQTT Source

*Provided by: "Apache Software Foundation"*

*Support Level for this Kamelet is: "Preview"*

Allows receiving messages from any endpoint that supports the MQTT protocol, such as a message broker.

== Configuration Options

The following table summarizes the configuration options available for the `mqtt-source` Kamelet:
[width="100%",cols="2,^2,3,^2,^2,^3",options="header"]
|===
| Property| Name| Description| Type| Default| Example
| *brokerUrl {empty}* *| Broker URL| The URL of the broker where to establish the connection| string| | `"tcp://mosquitto:1883"`
| *topic {empty}* *| Topic| The topic to subscribe to| string| | `"mytopic"`
| clientId| Client ID| The client ID to use when connecting to the resource| string| `"mqtt-source"`| 
|===

NOTE: Fields marked with ({empty}*) are mandatory.

== Usage

This section summarizes how the `mqtt-source` can be used in various contexts.

=== Knative Source

The `mqtt-source` Kamelet can be used as Knative source by binding it to a Knative object.

.mqtt-source-binding.yaml
[source,yaml]
----
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: mqtt-source-binding
spec:
  source:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: mqtt-source
    properties:
      brokerUrl: "tcp://mosquitto:1883"
      topic: "mytopic"
  sink:
    ref:
      kind: InMemoryChannel
      apiVersion: messaging.knative.dev/v1
      name: mychannel
  
----
Make sure you have xref:latest@camel-k::installation/installation.adoc[Camel K installed] into the Kubernetes cluster you're connected to.

Save the `mqtt-source-binding.yaml` file into your hard drive, then configure it according to your needs.

You can run the source using the following command:

[source,shell]
----
kubectl apply -f mqtt-source-binding.yaml
----

==== *Dependencies*

The Kamelet needs the following dependencies:


- camel:paho
- camel:kamelet 

==== *Binding to Knative using the Kamel CLI:*

The procedure described above can be simplified into a single execution of the `kamel bind` command:

[source,shell]
----
kamel bind mqtt-source -p "source.brokerUrl=tcp://mosquitto:1883" -p "source.topic=mytopic" channel/mychannel
----

This will create the KameletBinding under the hood and apply it to the current namespace in the cluster.

=== Kafka Source

The `mqtt-source` Kamelet can be used as Kafka source by binding it to a Kafka topic.

.mqtt-source-binding.yaml
[source,yaml]
----
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: mqtt-source-binding
spec:
  source:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: mqtt-source
    properties:
      brokerUrl: "tcp://mosquitto:1883"
      topic: "mytopic"
  sink:
    ref:
      kind: KafkaTopic
      apiVersion: kafka.strimzi.io/v1beta1
      name: my-topic
  
----

Ensure that you've installed https://strimzi.io/[Strimzi] and created a topic named `my-topic` in the current namespace.
Make also sure you have xref:latest@camel-k::installation/installation.adoc[Camel K installed] into the Kubernetes cluster you're connected to.

Save the `mqtt-source-binding.yaml` file into your hard drive, then configure it according to your needs.

You can run the source using the following command:

[source,shell]
----
kubectl apply -f mqtt-source-binding.yaml
----

==== *Binding to Kafka using the Kamel CLI:*

The procedure described above can be simplified into a single execution of the `kamel bind` command:

[source,shell]
----
kamel bind mqtt-source -p "source.brokerUrl=tcp://mosquitto:1883" -p "source.topic=mytopic" kafka.strimzi.io/v1beta1:KafkaTopic:my-topic
----

This will create the KameletBinding under the hood and apply it to the current namespace in the cluster.

// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
