// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
= image:kamelets/jms-apache-artemis-source.svg[] JMS - Apache Artemis Kamelet Source

*Provided by: "Apache Software Foundation"*

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

A Kamelet that can consume events from an Apache Artemis message broker using JMS

== Configuration Options

The following table summarizes the configuration options available for the `jms-apache-artemis-source` Kamelet:
[width="100%",cols="2,^2,3,^2,^2,^3",options="header"]
|===
| Property| Name| Description| Type| Default| Example
| *brokerURL {empty}* *| Broker URL| The JMS URL| string| | `"tcp://k3s-node-master.usersys.redhat.com:31616"`
| *destinationName {empty}* *| Destination Name| The JMS destination name| string| | 
| destinationType| Destination Type| The JMS destination type (i.e.: queue or topic)| string| `"queue"`| 
|===

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

== Usage

This section summarizes how the `jms-apache-artemis-source` can be used in various contexts.

=== Knative Source

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

.jms-apache-artemis-source-binding.yaml
[source,yaml]
----
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: jms-apache-artemis-source-binding
spec:
  source:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: jms-apache-artemis-source
    properties:
      brokerURL: "tcp://k3s-node-master.usersys.redhat.com:31616"
      destinationName: "The Destination 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 `jms-apache-artemis-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 jms-apache-artemis-source-binding.yaml
----

==== *Dependencies*

The Kamelet needs the following dependencies:


- camel:jms
- camel:kamelet
- mvn:org.apache.activemq:artemis-jms-client-all:2.17.0 

==== *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 jms-apache-artemis-source -p "source.brokerURL=tcp://k3s-node-master.usersys.redhat.com:31616" -p "source.destinationName=The Destination Name" channel/mychannel
----

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

=== Kafka Source

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

.jms-apache-artemis-source-binding.yaml
[source,yaml]
----
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: jms-apache-artemis-source-binding
spec:
  source:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: jms-apache-artemis-source
    properties:
      brokerURL: "tcp://k3s-node-master.usersys.redhat.com:31616"
      destinationName: "The Destination 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 `jms-apache-artemis-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 jms-apache-artemis-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 jms-apache-artemis-source -p "source.brokerURL=tcp://k3s-node-master.usersys.redhat.com:31616" -p "source.destinationName=The Destination 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
