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

*Provided by: "Apache Software Foundation"*

Send Events to Azure Eventhubs.

The Kamelet is able to understand the following headers to be set:

- `partition` / `ce-partition`: as the time to live of the message in the queue.

If the header won't be set then the partition will be assigned by Eventhubs

== Configuration Options

The following table summarizes the configuration options available for the `azure-eventhubs-sink` Kamelet:
[width="100%",cols="2,^2,3,^2,^2,^3",options="header"]
|===
| Property| Name| Description| Type| Default| Example
| *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-sink` can be used in various contexts.

=== Knative Sink

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

.azure-eventhubs-sink-binding.yaml
[source,yaml]
----
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: azure-eventhubs-sink-binding
spec:
  source:
    ref:
      kind: InMemoryChannel
      apiVersion: messaging.knative.dev/v1
      name: mychannel
  sink:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: azure-eventhubs-sink
    properties:
      eventhubName: "The Eventhubs name"
      namespaceName: "The Eventhubs Namespace"
      sharedAccessKey: "The Share access key"
      sharedAccessName: "The Share access name"

----

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-sink-binding.yaml` file into your hard drive, then configure it according to your needs.

You can run the sink using the following command:

[source,shell]
----
kubectl apply -f azure-eventhubs-sink-binding.yaml
----
// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
