mirror of https://github.com/knative/docs.git
Document usage of Camel K in sources (#1569)
* Document usage of Camel K in sources * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md
This commit is contained in:
parent
9315461ea6
commit
d102eaaa8d
|
@ -1,6 +1,5 @@
|
|||
These samples show how to configure a Camel source. It is a event source that
|
||||
can leverage one of the
|
||||
[250+ Apache Camel components](https://github.com/apache/camel/tree/master/components)
|
||||
These samples show how to configure a Camel Source. It is an Event Source that
|
||||
can leverage one of the [250+ Apache Camel components](https://github.com/apache/camel/tree/master/components)
|
||||
for generating events.
|
||||
|
||||
## Prerequisites
|
||||
|
@ -11,29 +10,29 @@ for generating events.
|
|||
any namespace where you want to run Camel sources.
|
||||
|
||||
The preferred version that is compatible with Camel sources is
|
||||
[Camel K v0.2.0](https://github.com/apache/camel-k/releases/tag/0.2.0).
|
||||
[Camel K v0.3.3](https://github.com/apache/camel-k/releases/tag/0.3.3).
|
||||
|
||||
Installation instruction are provided on the
|
||||
[Apache Camel K Github repository](https://github.com/apache/camel-k#installation).
|
||||
Documentation includes specific instructions for common Kubernetes
|
||||
environments, including development clusters.
|
||||
|
||||
1. Install the Camel Source from the `camel.yaml` in the
|
||||
[Eventing Sources release page](https://github.com/knative/eventing-contrib/releases):
|
||||
1.(Optional) Download Kail binaries for Linux or OSX, which can be found on the [latest release](https://github.com/boz/kail/releases/latest) page. You can use `kail` instead of `kubectl logs` to tail the logs of the subscriber.
|
||||
|
||||
1. Install the Camel Source from the `camel.yaml` in the [Eventing Sources release page](https://github.com/knative/eventing-contrib/releases):
|
||||
|
||||
```shell
|
||||
kubectl apply --filename camel.yaml
|
||||
```
|
||||
|
||||
|
||||
## Create a Channel and a Subscriber
|
||||
### Create a Channel and a Subscriber
|
||||
|
||||
In order to check if a `CamelSource` is fully working, we will create:
|
||||
To verify that the `CamelSource` is working, we will create:
|
||||
|
||||
- a simple Knative event display service that prints incoming events to its log
|
||||
- a in-memory channel named `camel-test` that will buffer events created by the
|
||||
event source
|
||||
- a subscription to direct events from the test channel to the event display
|
||||
service
|
||||
- an in-memory channel named `camel-test` that will buffer events created by the event source
|
||||
- a subscription to direct events from the test channel to the event display service
|
||||
|
||||
Deploy the [`display_resources.yaml`](./display_resources.yaml):
|
||||
|
||||
|
@ -41,34 +40,45 @@ Deploy the [`display_resources.yaml`](./display_resources.yaml):
|
|||
kubectl apply --filename display_resources.yaml
|
||||
```
|
||||
|
||||
## Run a CamelSource using the Timer component
|
||||
### Run a CamelSource using the Timer component
|
||||
|
||||
The simplest example of CamelSource, that does not require additional
|
||||
configuration, is the "timer" source.
|
||||
The samples directory contains some sample sources that can be used to generate
|
||||
events.
|
||||
|
||||
The simplest one, that does not require additional configuration is the "timer"
|
||||
source.
|
||||
|
||||
If you want, you can customize the source behavior using options available in
|
||||
the Apache Camel documentation for the
|
||||
[timer component](https://github.com/apache/camel/blob/master/components/camel-timer/src/main/docs/timer-component.adoc).
|
||||
All Camel components are documented in the
|
||||
[Apache Camel github repository](https://github.com/apache/camel/tree/master/components).
|
||||
[Apache Camel GitHub repository](https://github.com/apache/camel/tree/master/components).
|
||||
|
||||
Install the [`source_timer.yaml`](source_timer.yaml) resource:
|
||||
Install the [timer CamelSource](source_timer.yaml) from source:
|
||||
|
||||
```shell
|
||||
kubectl apply --filename source_timer.yaml
|
||||
kubectl apply -f source_timer.yaml
|
||||
```
|
||||
|
||||
We will verify that the published events were sent into the Knative eventing
|
||||
system by looking at what is downstream of the `CamelSource`.
|
||||
|
||||
We will verify that the published message was sent to the Knative eventing
|
||||
system by looking at the downstream of the `CamelSource`.
|
||||
|
||||
```shell
|
||||
kubectl logs --selector serving.knative.dev/service=camel-event-display -c user-container
|
||||
```
|
||||
or
|
||||
|
||||
If you've deployed the timer source, you should see log lines appearing every 3
|
||||
You can also use [`kail`](https://github.com/boz/kail) to tail the logs of the subscriber.
|
||||
|
||||
```shell
|
||||
kail -d camel-event-display --since=10m
|
||||
```
|
||||
|
||||
If you have deployed the timer source, you should see log lines appearing every 3
|
||||
seconds.
|
||||
|
||||
## Run a CamelSource using the Telegram component
|
||||
|
||||
### Run a CamelSource using the Telegram component
|
||||
|
||||
Another useful component available with Camel is the Telegram component. It can
|
||||
be used to forward messages of a [Telegram](https://telegram.org/) chat into
|
||||
|
@ -82,9 +92,8 @@ Bot, using your preferred Telegram client (mobile or web). After you create the
|
|||
bot, you'll receive an **authorization token** that is needed for the source to
|
||||
work.
|
||||
|
||||
First, download and edit the [`source_telegram.yaml`](source_telegram.yaml) file
|
||||
and put the authorization token, replacing the `<put-your-token-here>`
|
||||
placeholder.
|
||||
First, edit the [telegram CamelSource](source_telegram.yaml) and put the
|
||||
authorization token, replacing the `<put-your-token-here>` placeholder.
|
||||
|
||||
To reduce noise in the event display, you can remove the previously created
|
||||
timer CamelSource from the namespace:
|
||||
|
@ -93,19 +102,44 @@ timer CamelSource from the namespace:
|
|||
kubectl delete camelsource camel-timer-source
|
||||
```
|
||||
|
||||
Install the [`source_telegram.yaml`](source_telegram.yaml) resource:
|
||||
Install the [telegram CamelSource](source_telegram.yaml) from source:
|
||||
|
||||
```shell
|
||||
kubectl apply -f source_telegram.yaml
|
||||
kunbectl apply -f source_telegram.yaml
|
||||
```
|
||||
|
||||
Now, you can **send messages to your bot** with any Telegram client.
|
||||
|
||||
Check again the logs on the event display:
|
||||
Start `kail` again and keep it open on the event display:
|
||||
|
||||
```shell
|
||||
kubectl logs --selector serving.knative.dev/service=camel-event-display -c user-container
|
||||
kail -d camel-event-display --since=10m
|
||||
```
|
||||
|
||||
Each message you send to the bot will be printed by the event display as a
|
||||
cloudevent.
|
||||
Now, you can contact your bot with any Telegram client. Each message you send
|
||||
to the bot will be printed by the event display as a cloudevent.
|
||||
|
||||
|
||||
### Run a Camel K Source
|
||||
|
||||
For complex use cases that require multiple steps to be executed before event data is ready to be published, you can use Camel K sources.
|
||||
Camel K lets you use Camel DSL to design one or more routes that can define complex workflows before sending events to the target sink.
|
||||
|
||||
If you have previously deployed other CamelSources, to reduce noise in the event display, you can remove them all from the namespace:
|
||||
|
||||
```shell
|
||||
kubectl delete camelsource --all
|
||||
```
|
||||
|
||||
Install the [Camel K Source](source_camel_k.yaml) from source:
|
||||
|
||||
```shell
|
||||
kubectl apply -f source_camel_k.yaml
|
||||
```
|
||||
|
||||
Start `kail` again and keep it open on the event display:
|
||||
|
||||
```shell
|
||||
kail -d camel-event-display --since=10m
|
||||
```
|
||||
|
||||
The event display will show some JSON data periodically pulled from an external REST API.
|
||||
The API in the example is static, but you can use your own dynamic API by replacing the endpoint.
|
||||
|
|
Loading…
Reference in New Issue