// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
= image:kamelets/azure-eventhubs-source.svg[] Azure Eventhubs Source

*Provided by: "Apache Software Foundation"*

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

Receive events from Azure Eventhubs.

== Configuration Options

The following table summarizes the configuration options available for the `azure-eventhubs-source` Kamelet:
[width="100%",cols="2,^2,3,^2,^2,^3",options="header"]
|===
| Property| Name| Description| Type| Default| Example
| *blobAccessKey {empty}* *| Azure Storage Blob Access Key| The key for Azure Storage Blob service associated with the Blob account name| string| | 
| *blobAccountName {empty}* *| Azure Storage Blob Account Name| The name of the storage blob account to be use| string| | 
| *blobContainerName {empty}* *| Azure Storage Blob Container Name| The name of the storage blob container to be use| string| | 
| *eventhubName {empty}* *| Eventhubs Name| The eventhub name| string| | 
| *namespaceName {empty}* *| Eventhubs Namespace| The eventhubs namespace| string| | 
| *sharedAccessKey {empty}* *| Share Access Key| The key for EventHubs SAS key name| string| | 
| *sharedAccessName {empty}* *| Share Access Name| EventHubs SAS key name| string| | 
|===

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

== Usage

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

=== Knative Source

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

.azure-eventhubs-source-binding.yaml
[source,yaml]
----
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: azure-eventhubs-source-binding
spec:
  source:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: azure-eventhubs-source
    properties:
      blobAccessKey: "The Azure Storage Blob Access Key"
      blobAccountName: "The Azure Storage Blob Account Name"
      blobContainerName: "The Azure Storage Blob Container Name"
      eventhubName: "The Eventhubs Name"
      namespaceName: "The Eventhubs Namespace"
      sharedAccessKey: "The Share Access Key"
      sharedAccessName: "The Share Access Name"
  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 `azure-eventhubs-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 azure-eventhubs-source-binding.yaml
----

==== *Dependencies*

The Kamelet needs the following dependencies:


- mvn:com.fasterxml.jackson.core:jackson-core:2.11.3
- mvn:com.fasterxml.jackson.core:jackson-annotations:2.11.3
- mvn:com.fasterxml.jackson.core:jackson-databind:2.11.3
- mvn:com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.11.3
- camel:azure-eventhubs
- camel:kamelet
- camel:jackson 

==== *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 azure-eventhubs-source -p "source.blobAccessKey=The Azure Storage Blob Access Key" -p "source.blobAccountName=The Azure Storage Blob Account Name" -p "source.blobContainerName=The Azure Storage Blob Container Name" -p "source.eventhubName=The Eventhubs Name" -p "source.namespaceName=The Eventhubs Namespace" -p "source.sharedAccessKey=The Share Access Key" -p "source.sharedAccessName=The Share Access Name" channel/mychannel
----

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

=== Kafka Source

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

.azure-eventhubs-source-binding.yaml
[source,yaml]
----
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: azure-eventhubs-source-binding
spec:
  source:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: azure-eventhubs-source
    properties:
      blobAccessKey: "The Azure Storage Blob Access Key"
      blobAccountName: "The Azure Storage Blob Account Name"
      blobContainerName: "The Azure Storage Blob Container Name"
      eventhubName: "The Eventhubs Name"
      namespaceName: "The Eventhubs Namespace"
      sharedAccessKey: "The Share Access Key"
      sharedAccessName: "The Share Access Name"
  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 `azure-eventhubs-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 azure-eventhubs-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 azure-eventhubs-source -p "source.blobAccessKey=The Azure Storage Blob Access Key" -p "source.blobAccountName=The Azure Storage Blob Account Name" -p "source.blobContainerName=The Azure Storage Blob Container Name" -p "source.eventhubName=The Eventhubs Name" -p "source.namespaceName=The Eventhubs Namespace" -p "source.sharedAccessKey=The Share Access Key" -p "source.sharedAccessName=The Share Access Name" 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
