// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
= image:kamelets/google-pubsub-source.svg[] Google Pubsub Source

*Provided by: "Apache Software Foundation"*

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

Consume messages from Google Pubsub.

The serviceAccountKey property needs to be encoded in base64, so when you pass it as parameter, don't forget to encode it.

== Configuration Options

The following table summarizes the configuration options available for the `google-pubsub-source` Kamelet:
[width="100%",cols="2,^2,3,^2,^2,^3",options="header"]
|===
| Property| Name| Description| Type| Default| Example
| *projectId {empty}* *| Project Id| The Google Cloud PubSub Project Id| string| | 
| *serviceAccountKey {empty}* *| Service Account Key| The Service account key that can be used as credentials for the PubSub publisher/subscriber| binary| | 
| *subscriptionName {empty}* *| Subscription Name| The Subscription Name| string| | 
| concurrentConsumers| Concurrent Consumers| The number of parallel streams consuming from the subscription| integer| `1`| 
| maxMessagesPerPoll| Max Messages Per Poll| The max number of messages to receive from the server in a single API call| integer| `1`| 
| synchronousPull| Synchronous Pull| If Synchronously pull batches of messages is enabled or not| boolean| `false`| 
|===

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

== Usage

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

=== Knative Source

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

.google-pubsub-source-binding.yaml
[source,yaml]
----
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: google-pubsub-source-binding
spec:
  source:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: google-pubsub-source
    properties:
      projectId: "The Project Id"
      serviceAccountKey: "The Service Account Key"
      subscriptionName: "The Subscription 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 `google-pubsub-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 google-pubsub-source-binding.yaml
----

==== *Dependencies*

The Kamelet needs the following dependencies:


- camel:kamelet
- camel:google-pubsub
- 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 google-pubsub-source -p "source.projectId=The Project Id" -p "source.serviceAccountKey=The Service Account Key" -p "source.subscriptionName=The Subscription Name" channel/mychannel
----

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

=== Kafka Source

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

.google-pubsub-source-binding.yaml
[source,yaml]
----
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: google-pubsub-source-binding
spec:
  source:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: google-pubsub-source
    properties:
      projectId: "The Project Id"
      serviceAccountKey: "The Service Account Key"
      subscriptionName: "The Subscription 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 `google-pubsub-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 google-pubsub-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 google-pubsub-source -p "source.projectId=The Project Id" -p "source.serviceAccountKey=The Service Account Key" -p "source.subscriptionName=The Subscription 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
