mirror of https://github.com/knative/docs.git
Add docs / samples for Sequence (#1481)
* sequence with broker * add sequence -> sequence sample * sequence wired to event display * terminal sequence * first two examples moved to new v1beta1 services + cascading changes * fix sequence2sequence to use v1beta services / default ns * fix broker example to use v1beta1 service + default ns * Address PR feedback * add a pointer to vaikas-google/transformer sample * update transformer image refs to latest * address PR feedback * move overview before prerequisites, add link to main sequence page
This commit is contained in:
parent
80ab0ac297
commit
c050da8bb5
|
@ -0,0 +1,197 @@
|
||||||
|
---
|
||||||
|
title: "Sequence Wired to event-display"
|
||||||
|
weight: 20
|
||||||
|
type: "docs"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Using Sequences in series
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
We are going to create the following logical configuration. We create a CronJobSource,
|
||||||
|
feeding events to a (`Sequence`)[../../../sequence.md], then taking the output of that `Sequence` and
|
||||||
|
displaying the resulting output.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
For this example, we'll assume you have set up an `InMemoryChannel`
|
||||||
|
as well as Knative Serving (for our functions). The examples use `default`
|
||||||
|
namespace, again, if you want to deploy to another Namespace, you will need
|
||||||
|
to modify the examples to reflect this.
|
||||||
|
|
||||||
|
If you want to use different type of `Channel`, you will have to modify the
|
||||||
|
`Sequence.Spec.ChannelTemplate` to create the appropriate Channel resources.
|
||||||
|
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
### Create the Knative Services
|
||||||
|
|
||||||
|
Change `default` below to create the steps in the Namespace where you want resources
|
||||||
|
created.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: first
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "0"
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: second
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "1"
|
||||||
|
---
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: third
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "2"
|
||||||
|
---
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl -n default create -f ./steps.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
### Create the Sequence
|
||||||
|
|
||||||
|
The `sequence.yaml` file contains the specifications for creating the Sequence. If you are using a different type of Channel, you need to change the
|
||||||
|
spec.channelTemplate to point to your desired Channel.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: Sequence
|
||||||
|
metadata:
|
||||||
|
name: sequence
|
||||||
|
spec:
|
||||||
|
channelTemplate:
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: InMemoryChannel
|
||||||
|
steps:
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: first
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: second
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: third
|
||||||
|
reply:
|
||||||
|
kind: Service
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
name: event-display
|
||||||
|
```
|
||||||
|
|
||||||
|
Change `default` below to create the `Sequence` in the Namespace where you want the
|
||||||
|
resources to be created.
|
||||||
|
```shell
|
||||||
|
kubectl -n default create -f ./sequence.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Create the Service displaying the events created by Sequence
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: event-display
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: gcr.io/knative-releases/github.com/knative/eventing-sources/cmd/event_display
|
||||||
|
```
|
||||||
|
|
||||||
|
Change `default` below to create the `Sequence` in the Namespace where you want your resources
|
||||||
|
to be created.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl -n default create -f ./event-display.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
### Create the CronJobSource targeting the Sequence
|
||||||
|
|
||||||
|
This will create a CronJobSource which will send a CloudEvent with {"message": "Hello world!"} as
|
||||||
|
the data payload every 2 minutes.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: sources.eventing.knative.dev/v1alpha1
|
||||||
|
kind: CronJobSource
|
||||||
|
metadata:
|
||||||
|
name: cronjob-source
|
||||||
|
spec:
|
||||||
|
schedule: "*/2 * * * *"
|
||||||
|
data: '{"message": "Hello world!"}'
|
||||||
|
sink:
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: Sequence
|
||||||
|
name: sequence
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl -n default create -f ./cron-source.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
### Inspecting the results
|
||||||
|
|
||||||
|
You can now see the final output by inspecting the logs of the event-display pods.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl -n default get pods
|
||||||
|
```
|
||||||
|
|
||||||
|
Then look at the logs for the event-display pod:
|
||||||
|
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl -n default logs -l serving.knative.dev/service=event-display -c user-container
|
||||||
|
☁️ cloudevents.Event
|
||||||
|
Validation: valid
|
||||||
|
Context Attributes,
|
||||||
|
cloudEventsVersion: 0.1
|
||||||
|
eventType: samples.http.mod3
|
||||||
|
source: /transformer/2
|
||||||
|
eventID: df52b47e-02fd-45b2-8180-dabb572573f5
|
||||||
|
eventTime: 2019-06-18T14:18:42.478140635Z
|
||||||
|
contentType: application/json
|
||||||
|
Data,
|
||||||
|
{
|
||||||
|
"id": 0,
|
||||||
|
"message": "Hello world! - Handled by 0 - Handled by 1 - Handled by 2"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
And you can see that the initial Cron Source message ("Hello World!") has been appended to it by each
|
||||||
|
of the steps in the Sequence.
|
|
@ -0,0 +1,11 @@
|
||||||
|
apiVersion: sources.eventing.knative.dev/v1alpha1
|
||||||
|
kind: CronJobSource
|
||||||
|
metadata:
|
||||||
|
name: cronjob-source
|
||||||
|
spec:
|
||||||
|
schedule: "*/2 * * * *"
|
||||||
|
data: '{"message": "Hello world!"}'
|
||||||
|
sink:
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: Sequence
|
||||||
|
name: sequence
|
|
@ -0,0 +1,9 @@
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: event-display
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: gcr.io/knative-releases/github.com/knative/eventing-sources/cmd/event_display
|
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
|
@ -0,0 +1,25 @@
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: Sequence
|
||||||
|
metadata:
|
||||||
|
name: sequence
|
||||||
|
spec:
|
||||||
|
channelTemplate:
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: InMemoryChannel
|
||||||
|
steps:
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: first
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: second
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: third
|
||||||
|
reply:
|
||||||
|
kind: Service
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
name: event-display
|
|
@ -0,0 +1,40 @@
|
||||||
|
apiVersion: serving.knative.dev/v1alpha1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: first
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "0"
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: serving.knative.dev/v1alpha1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: second
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "1"
|
||||||
|
---
|
||||||
|
apiVersion: serving.knative.dev/v1alpha1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: third
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "2"
|
||||||
|
---
|
|
@ -0,0 +1,271 @@
|
||||||
|
---
|
||||||
|
title: "Sequence Wired to another Sequence"
|
||||||
|
weight: 20
|
||||||
|
type: "docs"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Using Sequences in series
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
We are going to create the following logical configuration. We create a CronJobSource,
|
||||||
|
feeding events to a (`Sequence`)[../../../sequence.md], then taking the output of that `Sequence` and sending
|
||||||
|
it to a second `Sequence` and finally displaying the resulting output.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
For this example, we'll assume you have set up a an `InMemoryChannel`
|
||||||
|
as well as Knative Serving (for our functions). The examples use `default`
|
||||||
|
namespace, again, if you want to deploy to another Namespace, you will need to
|
||||||
|
modify the examples to reflect this.
|
||||||
|
|
||||||
|
If you want to use different type of `Channel`, you will have to modify the
|
||||||
|
`Sequence.Spec.ChannelTemplate` to create the appropriate Channel resources.
|
||||||
|
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
### Create the Knative Services
|
||||||
|
|
||||||
|
Change `default` below to create the steps in the Namespace where you want resources
|
||||||
|
created.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: first
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "0"
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: second
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "1"
|
||||||
|
---
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: third
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "2"
|
||||||
|
---
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: fourth
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "3"
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: fifth
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "4"
|
||||||
|
---
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: sixth
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "5"
|
||||||
|
---
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl -n default create -f ./steps.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
### Create the first Sequence
|
||||||
|
|
||||||
|
The `sequence1.yaml` file contains the specifications for creating the Sequence. If you are using a different type of
|
||||||
|
Channel, you need to change the spec.channelTemplate to point to your desired Channel.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: Sequence
|
||||||
|
metadata:
|
||||||
|
name: first-sequence
|
||||||
|
spec:
|
||||||
|
channelTemplate:
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: InMemoryChannel
|
||||||
|
steps:
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: first
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: second
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: third
|
||||||
|
reply:
|
||||||
|
kind: Sequence
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
name: second-sequence
|
||||||
|
```
|
||||||
|
|
||||||
|
Change `default` below to create the `Sequence` in the Namespace where you want
|
||||||
|
your resources created.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl -n default create -f ./sequence1.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Create the second Sequence
|
||||||
|
|
||||||
|
The `sequence2.yaml` file contains the specifications for creating the Sequence. If you are using a different type of
|
||||||
|
Channel, you need to change the spec.channelTemplate to point to your desired Channel.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: Sequence
|
||||||
|
metadata:
|
||||||
|
name: second-sequence
|
||||||
|
spec:
|
||||||
|
channelTemplate:
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: InMemoryChannel
|
||||||
|
steps:
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: fourth
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: fifth
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: sixth
|
||||||
|
reply:
|
||||||
|
kind: Service
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
name: event-display
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Create the Service displaying the events created by Sequence
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: event-display
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containerers:
|
||||||
|
- image: gcr.io/knative-releases/github.com/knative/eventing-sources/cmd/event_display
|
||||||
|
```
|
||||||
|
|
||||||
|
Change `default` below to create the `Sequence` in the Namespace where you want your resources
|
||||||
|
created.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl -n default create -f ./event-display.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
### Create the CronJobSource targeting the first Sequence
|
||||||
|
|
||||||
|
This will create a CronJobSource which will send a CloudEvent with {"message": "Hello world!"} as
|
||||||
|
the data payload every 2 minutes.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: sources.eventing.knative.dev/v1alpha1
|
||||||
|
kind: CronJobSource
|
||||||
|
metadata:
|
||||||
|
name: cronjob-source
|
||||||
|
spec:
|
||||||
|
schedule: "*/2 * * * *"
|
||||||
|
data: '{"message": "Hello world!"}'
|
||||||
|
sink:
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: Sequence
|
||||||
|
name: first-sequence
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl -n default create -f ./cron-source.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
### Inspecting the results
|
||||||
|
|
||||||
|
You can now see the final output by inspecting the logs of the event-display pods.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl -n default get pods
|
||||||
|
```
|
||||||
|
|
||||||
|
Then look at the logs for the event-display pod:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl -n default logs -l serving.knative.dev/service=event-display -c user-container
|
||||||
|
☁️ cloudevents.Event
|
||||||
|
Validation: valid
|
||||||
|
Context Attributes,
|
||||||
|
cloudEventsVersion: 0.1
|
||||||
|
eventType: samples.http.mod3
|
||||||
|
source: /transformer/5
|
||||||
|
eventID: 7628a147-ec74-43d5-a888-8384a1b6b005
|
||||||
|
eventTime: 2019-06-18T13:57:20.279354375Z
|
||||||
|
contentType: application/json
|
||||||
|
Data,
|
||||||
|
{
|
||||||
|
"id": 0,
|
||||||
|
"message": "Hello world! - Handled by 0 - Handled by 1 - Handled by 2 - Handled by 3 - Handled by 4 - Handled by 5"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
And you can see that the initial Cron Source message ("Hello World!") has been appended to it by each
|
||||||
|
of the steps in the Sequence.
|
|
@ -0,0 +1,11 @@
|
||||||
|
apiVersion: sources.eventing.knative.dev/v1alpha1
|
||||||
|
kind: CronJobSource
|
||||||
|
metadata:
|
||||||
|
name: cronjob-source
|
||||||
|
spec:
|
||||||
|
schedule: "*/2 * * * *"
|
||||||
|
data: '{"message": "Hello world!"}'
|
||||||
|
sink:
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: Sequence
|
||||||
|
name: first-sequence
|
|
@ -0,0 +1,9 @@
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: event-display
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: gcr.io/knative-releases/github.com/knative/eventing-sources/cmd/event_display
|
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
|
@ -0,0 +1,25 @@
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: Sequence
|
||||||
|
metadata:
|
||||||
|
name: first-sequence
|
||||||
|
spec:
|
||||||
|
channelTemplate:
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: InMemoryChannel
|
||||||
|
steps:
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: first
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: second
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: third
|
||||||
|
reply:
|
||||||
|
kind: Sequence
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
name: second-sequence
|
|
@ -0,0 +1,25 @@
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: Sequence
|
||||||
|
metadata:
|
||||||
|
name: second-sequence
|
||||||
|
spec:
|
||||||
|
channelTemplate:
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: InMemoryChannel
|
||||||
|
steps:
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: fourth
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: fifth
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: sixth
|
||||||
|
reply:
|
||||||
|
kind: Service
|
||||||
|
apiVersion: serving.knative.dev/v1alpha1
|
||||||
|
name: event-display
|
|
@ -0,0 +1,80 @@
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: first
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "0"
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: second
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "1"
|
||||||
|
---
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: third
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "2"
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: fourth
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "3"
|
||||||
|
---
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: fifth
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "4"
|
||||||
|
---
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: sixth
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "5"
|
||||||
|
---
|
|
@ -0,0 +1,257 @@
|
||||||
|
title: "Sequence terminal"
|
||||||
|
weight: 20
|
||||||
|
type: "docs"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Using Sequences in series
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
We are going to create the following logical configuration. We create a CronJobSource,
|
||||||
|
feeding events to a (`Sequence`)[../../../sequence.md]. Sequence can then do either external work, or
|
||||||
|
out of band create additional events.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
For this example, we'll assume you have set up an `InMemoryChannel`
|
||||||
|
as well as Knative Serving (for our functions). The examples use `default`
|
||||||
|
namespace, again, if you want to deploy to another Namespace, you will need
|
||||||
|
to modify the examples to reflect this.
|
||||||
|
|
||||||
|
If you want to use different type of `Channel`, you will have to modify the
|
||||||
|
`Sequence.Spec.ChannelTemplate` to create the appropriate Channel resources.
|
||||||
|
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
### Create the Knative Services
|
||||||
|
|
||||||
|
First create the 3 steps that will be referenced in the Steps.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: first
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "0"
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: second
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "1"
|
||||||
|
---
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: third
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "2"
|
||||||
|
---
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl -n default create -f ./steps.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
### Create the Sequence
|
||||||
|
|
||||||
|
The `sequence.yaml` file contains the specifications for creating the Sequence. If you are using a different type of Channel, you need to change the
|
||||||
|
spec.channelTemplate to point to your desired Channel.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: Sequence
|
||||||
|
metadata:
|
||||||
|
name: sequence
|
||||||
|
spec:
|
||||||
|
channelTemplate:
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: InMemoryChannel
|
||||||
|
steps:
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: first
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: second
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: third
|
||||||
|
```
|
||||||
|
|
||||||
|
Change `default` below to create the `Sequence` in the Namespace where you want the
|
||||||
|
resources to be created.
|
||||||
|
```shell
|
||||||
|
kubectl -n default create -f ./sequence.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Create the CronJobSource targeting the Sequence
|
||||||
|
|
||||||
|
This will create a CronJobSource which will send a CloudEvent with {"message": "Hello world!"} as
|
||||||
|
the data payload every 2 minutes.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: sources.eventing.knative.dev/v1alpha1
|
||||||
|
kind: CronJobSource
|
||||||
|
metadata:
|
||||||
|
name: cronjob-source
|
||||||
|
spec:
|
||||||
|
schedule: "*/2 * * * *"
|
||||||
|
data: '{"message": "Hello world!"}'
|
||||||
|
sink:
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: Sequence
|
||||||
|
name: sequence
|
||||||
|
```
|
||||||
|
|
||||||
|
Here, if you are using different type of Channel, you need to change the
|
||||||
|
spec.channelTemplate to point to your desired Channel.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl -n default create -f ./cron-source.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
### Inspecting the results
|
||||||
|
|
||||||
|
You can now see the final output by inspecting the logs of the event-display pods. Note that since
|
||||||
|
we set the `CronJobSource` to emit every 2 minutes, it might take some time for the events to show
|
||||||
|
up in the logs.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl -n default get pods
|
||||||
|
```
|
||||||
|
|
||||||
|
Let's look at the logs for the first `Step` in the `Sequence`:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl -n default logs -l serving.knative.dev/service=first -c user-container
|
||||||
|
Got Event Context: Context Attributes,
|
||||||
|
specversion: 0.2
|
||||||
|
type: dev.knative.cronjob.event
|
||||||
|
source: /apis/v1/namespaces/default/cronjobsources/cronjob-source
|
||||||
|
id: 2fdf69ec-0480-463a-92fb-8d1259550f32
|
||||||
|
time: 2019-06-18T14:38:00.000379084Z
|
||||||
|
contenttype: application/json
|
||||||
|
Extensions,
|
||||||
|
knativehistory: sequence-kn-sequence-0-kn-channel.default.svc.cluster.local
|
||||||
|
2019/06/18 14:38:14 http: superfluous response.WriteHeader call from github.com/vaikas-google/transformer/vendor/github.com/cloudevents/sdk-go/pkg/cloudevents/transport/http.(*Transport).ServeHTTP (transport.go:446)
|
||||||
|
|
||||||
|
Got Data: &{Sequence:0 Message:Hello world!}
|
||||||
|
Got Transport Context: Transport Context,
|
||||||
|
URI: /
|
||||||
|
Host: first.default.svc.cluster.local
|
||||||
|
Method: POST
|
||||||
|
Header:
|
||||||
|
X-Request-Id: 9b51bcaa-10bc-97a5-a288-dde9b97f6e1e
|
||||||
|
Content-Length: 26
|
||||||
|
K-Proxy-Request: activator
|
||||||
|
X-Forwarded-For: 10.16.3.77, 127.0.0.1, 127.0.0.1
|
||||||
|
X-Forwarded-Proto: http
|
||||||
|
Ce-Knativehistory: sequence-kn-sequence-0-kn-channel.default.svc.cluster.local
|
||||||
|
X-B3-Spanid: 42bcd58bd1ea8191
|
||||||
|
X-B3-Parentspanid: c63efd989dcf5dc5
|
||||||
|
X-B3-Sampled: 0
|
||||||
|
X-B3-Traceid: 4a1da6622ecbbdea0c75ae32e065cfcb
|
||||||
|
|
||||||
|
----------------------------
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Then we can look at the output of the second Step in the `Sequence`:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl -n default logs -l serving.knative.dev/service=second -c user-container
|
||||||
|
Got Event Context: Context Attributes,
|
||||||
|
cloudEventsVersion: 0.1
|
||||||
|
eventType: samples.http.mod3
|
||||||
|
source: /transformer/0
|
||||||
|
eventID: 5a9ec173-5224-41a2-9c83-50786651bcd5
|
||||||
|
eventTime: 2019-06-18T14:38:14.657008072Z
|
||||||
|
contentType: application/json
|
||||||
|
|
||||||
|
Got Data: &{Sequence:0 Message:Hello world! - Handled by 0}
|
||||||
|
Got Transport Context: Transport Context,
|
||||||
|
URI: /
|
||||||
|
Host: second.default.svc.cluster.local
|
||||||
|
Method: POST
|
||||||
|
Header:
|
||||||
|
X-Forwarded-For: 10.16.3.77, 127.0.0.1, 127.0.0.1
|
||||||
|
X-Forwarded-Proto: http
|
||||||
|
Content-Length: 48
|
||||||
|
X-B3-Sampled: 0
|
||||||
|
Ce-Knativehistory: sequence-kn-sequence-1-kn-channel.default.svc.cluster.local
|
||||||
|
X-B3-Parentspanid: 4fba491a605b2391
|
||||||
|
K-Proxy-Request: activator
|
||||||
|
X-B3-Spanid: 56e4150c4e1d679b
|
||||||
|
X-B3-Traceid: fb468aa8ec035a66153ce3f4929aa2fe
|
||||||
|
X-Request-Id: d60e7109-3853-9ca1-83e2-c70f8cbfbb93
|
||||||
|
|
||||||
|
----------------------------
|
||||||
|
```
|
||||||
|
|
||||||
|
And you can see that the initial Cron Source message ("Hello World!") has now been modified by the
|
||||||
|
first step in the Sequence to include " - Handled by 0". Exciting :)
|
||||||
|
|
||||||
|
Then we can look at the output of the last Step in the `Sequence`:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl -n default logs -l serving.knative.dev/service=third -c user-container
|
||||||
|
Got Event Context: Context Attributes,
|
||||||
|
cloudEventsVersion: 0.1
|
||||||
|
eventType: samples.http.mod3
|
||||||
|
source: /transformer/1
|
||||||
|
eventID: 5747fb77-66a2-4e78-944b-43192aa879fb
|
||||||
|
eventTime: 2019-06-18T14:38:32.688345694Z
|
||||||
|
contentType: application/json
|
||||||
|
|
||||||
|
Got Data: &{Sequence:0 Message:Hello world! - Handled by 0 - Handled by 1}
|
||||||
|
Got Transport Context: Transport Context,
|
||||||
|
URI: /
|
||||||
|
Host: third.default.svc.cluster.local
|
||||||
|
Method: POST
|
||||||
|
Header:
|
||||||
|
X-B3-Sampled: 0
|
||||||
|
X-B3-Traceid: 64a9c48c219375476ffcdd5eb14ec6e0
|
||||||
|
X-Forwarded-For: 10.16.3.77, 127.0.0.1, 127.0.0.1
|
||||||
|
X-Forwarded-Proto: http
|
||||||
|
Ce-Knativehistory: sequence-kn-sequence-2-kn-channel.default.svc.cluster.local
|
||||||
|
K-Proxy-Request: activator
|
||||||
|
X-Request-Id: 505ff620-2822-9e7d-8855-53d02a2e36e2
|
||||||
|
Content-Length: 63
|
||||||
|
X-B3-Parentspanid: 9e822f378ead293c
|
||||||
|
X-B3-Spanid: a56ee81909c767e6
|
||||||
|
|
||||||
|
----------------------------
|
||||||
|
```
|
||||||
|
|
||||||
|
And as expected it's now been handled by both the first and second Step as reflected by
|
||||||
|
the Message being now: "Hello world! - Handled by 0 - Handled by 1"
|
|
@ -0,0 +1,11 @@
|
||||||
|
apiVersion: sources.eventing.knative.dev/v1alpha1
|
||||||
|
kind: CronJobSource
|
||||||
|
metadata:
|
||||||
|
name: cronjob-source
|
||||||
|
spec:
|
||||||
|
schedule: "*/2 * * * *"
|
||||||
|
data: '{"message": "Hello world!"}'
|
||||||
|
sink:
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: Sequence
|
||||||
|
name: sequence
|
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
|
@ -0,0 +1,21 @@
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: Sequence
|
||||||
|
metadata:
|
||||||
|
name: sequence
|
||||||
|
spec:
|
||||||
|
channelTemplate:
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: InMemoryChannel
|
||||||
|
steps:
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: first
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: second
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: third
|
|
@ -0,0 +1,40 @@
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: first
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "0"
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: second
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "1"
|
||||||
|
---
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: third
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "2"
|
||||||
|
---
|
|
@ -0,0 +1,227 @@
|
||||||
|
---
|
||||||
|
title: "Sequence with Broker and Trigger"
|
||||||
|
weight: 20
|
||||||
|
type: "docs"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Using Sequence with Broker and Trigger
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
We are going to create the following logical configuration. We create a CronJobSource,
|
||||||
|
feeding events into the Broker, then we create a `Filter` that wires those events
|
||||||
|
into a (`Sequence`)[../../../sequence.md] consisting of 3 steps. Then we take the end of the Sequence and
|
||||||
|
feed newly minted events back into the Broker and create another Trigger which
|
||||||
|
will then display those events.
|
||||||
|
|
||||||
|
**NOTE** [TODO: Fix this](https://github.com/knative/eventing/issues/1421)
|
||||||
|
So, currently as set up, the events emitted by the Sequence do not make it into
|
||||||
|
the Broker.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
For this example, we'll assume you have set up a `Broker` and an `InMemoryChannel`
|
||||||
|
as well as Knative Serving (for our functions). The examples use `default`
|
||||||
|
namespace, again, if your broker lives in another Namespace, you will need to
|
||||||
|
modify the examples to reflect this.
|
||||||
|
|
||||||
|
If you want to use different type of `Channel`, you will have to modify the
|
||||||
|
`Sequence.Spec.ChannelTemplate` to create the appropriate Channel resources.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
### Create the Knative Services
|
||||||
|
|
||||||
|
Change `default` below to create the steps in the Namespace where you have configured your
|
||||||
|
`Broker`
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: first
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "0"
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: second
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "1"
|
||||||
|
---
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: third
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "2"
|
||||||
|
|
||||||
|
---
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl -n default create -f ./steps.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
### Create the Sequence
|
||||||
|
|
||||||
|
The `sequence.yaml` file contains the specifications for creating the Sequence. If you are using a different type of Channel,
|
||||||
|
you need to change the spec.channelTemplate to point to your desired Channel.
|
||||||
|
|
||||||
|
Also, change the spec.reply.name to point to your `Broker`
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: Sequence
|
||||||
|
metadata:
|
||||||
|
name: sequence
|
||||||
|
spec:
|
||||||
|
channelTemplate:
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: InMemoryChannel
|
||||||
|
steps:
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: first
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: second
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: third
|
||||||
|
reply:
|
||||||
|
kind: Broker
|
||||||
|
apiVersion: eventing.knative.dev/v1alpha1
|
||||||
|
name: broker-test
|
||||||
|
```
|
||||||
|
|
||||||
|
Change `default` below to create the `Sequence` in the Namespace where you have configured your
|
||||||
|
`Broker`.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl -n default create -f ./sequence.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Create the CronJobSource targeting the Broker
|
||||||
|
|
||||||
|
This will create a CronJobSource which will send a CloudEvent with {"message": "Hello world!"} as
|
||||||
|
the data payload every 2 minutes.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: sources.eventing.knative.dev/v1alpha1
|
||||||
|
kind: CronJobSource
|
||||||
|
metadata:
|
||||||
|
name: cronjob-source
|
||||||
|
spec:
|
||||||
|
schedule: "*/2 * * * *"
|
||||||
|
data: '{"message": "Hello world!"}'
|
||||||
|
sink:
|
||||||
|
apiVersion: eventing.knative.dev/v1alpha1
|
||||||
|
kind: Broker
|
||||||
|
name: broker-test
|
||||||
|
```
|
||||||
|
|
||||||
|
Here, if you are using different type of Channel, you need to change the
|
||||||
|
spec.channelTemplate to point to your desired Channel. Also, change the
|
||||||
|
spec.reply.name to point to your `Broker`
|
||||||
|
|
||||||
|
Change `default` below to create the `Sequence` in the Namespace where you have configured your
|
||||||
|
`Broker`.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl -n default create -f ./cron-source.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
### Create the Trigger targeting the Sequence
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: eventing.knative.dev/v1alpha1
|
||||||
|
kind: Trigger
|
||||||
|
metadata:
|
||||||
|
name: sequence-trigger
|
||||||
|
spec:
|
||||||
|
filter:
|
||||||
|
sourceAndType:
|
||||||
|
type: dev.knative.cronjob.event
|
||||||
|
subscriber:
|
||||||
|
ref:
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: Sequence
|
||||||
|
name: sequence
|
||||||
|
```
|
||||||
|
|
||||||
|
Change `default` below to create the `Sequence` in the Namespace where you have configured your
|
||||||
|
`Broker`.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl -n default create -f ./trigger.yaml
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
### Create the Service and Trigger displaying the events created by Sequence
|
||||||
|
|
||||||
|
**NOTE** This does not work yet because the events created by the Sequence in the last step
|
||||||
|
are filtered. [TODO: Fix this](https://github.com/knative/eventing/issues/1421)
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: sequence-display
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: gcr.io/knative-releases/github.com/knative/eventing-sources/cmd/event_display
|
||||||
|
---
|
||||||
|
apiVersion: eventing.knative.dev/v1alpha1
|
||||||
|
kind: Trigger
|
||||||
|
metadata:
|
||||||
|
name: sequence-trigger
|
||||||
|
spec:
|
||||||
|
filter:
|
||||||
|
sourceAndType:
|
||||||
|
type: samples.http.mod3
|
||||||
|
subscriber:
|
||||||
|
ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: sequence-display
|
||||||
|
---
|
||||||
|
```
|
||||||
|
|
||||||
|
Change `default` below to create the `Sequence` in the Namespace where you have configured your
|
||||||
|
`Broker`.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl -n default create -f ./display-trigger.yaml
|
||||||
|
```
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
apiVersion: sources.eventing.knative.dev/v1alpha1
|
||||||
|
kind: CronJobSource
|
||||||
|
metadata:
|
||||||
|
name: cronjob-source
|
||||||
|
spec:
|
||||||
|
schedule: "*/2 * * * *"
|
||||||
|
data: '{"message": "Hello world!"}'
|
||||||
|
sink:
|
||||||
|
apiVersion: eventing.knative.dev/v1alpha1
|
||||||
|
kind: Broker
|
||||||
|
name: broker-test
|
|
@ -0,0 +1,27 @@
|
||||||
|
apiVersion: serving.knative.dev/v1alpha1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: sequence-display
|
||||||
|
spec:
|
||||||
|
runLatest:
|
||||||
|
configuration:
|
||||||
|
revisionTemplate:
|
||||||
|
spec:
|
||||||
|
container:
|
||||||
|
image: gcr.io/knative-releases/github.com/knative/eventing-sources/cmd/event_display
|
||||||
|
---
|
||||||
|
apiVersion: eventing.knative.dev/v1alpha1
|
||||||
|
kind: Trigger
|
||||||
|
metadata:
|
||||||
|
name: display-trigger
|
||||||
|
spec:
|
||||||
|
broker: broker-test
|
||||||
|
filter:
|
||||||
|
sourceAndType:
|
||||||
|
type: samples.http.mod3
|
||||||
|
subscriber:
|
||||||
|
ref:
|
||||||
|
apiVersion: serving.knative.dev/v1alpha1
|
||||||
|
kind: Service
|
||||||
|
name: sequence-display
|
||||||
|
---
|
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
|
@ -0,0 +1,25 @@
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: Sequence
|
||||||
|
metadata:
|
||||||
|
name: sequence
|
||||||
|
spec:
|
||||||
|
channelTemplate:
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: InMemoryChannel
|
||||||
|
steps:
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: first
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: second
|
||||||
|
- ref:
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
name: third
|
||||||
|
reply:
|
||||||
|
kind: Broker
|
||||||
|
apiVersion: eventing.knative.dev/v1alpha1
|
||||||
|
name: broker-test
|
|
@ -0,0 +1,41 @@
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: first
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "0"
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: second
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "1"
|
||||||
|
---
|
||||||
|
apiVersion: serving.knative.dev/v1beta1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: third
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700
|
||||||
|
env:
|
||||||
|
- name: STEP
|
||||||
|
value: "2"
|
||||||
|
|
||||||
|
---
|
|
@ -0,0 +1,14 @@
|
||||||
|
apiVersion: eventing.knative.dev/v1alpha1
|
||||||
|
kind: Trigger
|
||||||
|
metadata:
|
||||||
|
name: sequence-trigger
|
||||||
|
spec:
|
||||||
|
broker: broker-test
|
||||||
|
filter:
|
||||||
|
sourceAndType:
|
||||||
|
type: dev.knative.cronjob.event
|
||||||
|
subscriber:
|
||||||
|
ref:
|
||||||
|
apiVersion: messaging.knative.dev/v1alpha1
|
||||||
|
kind: Sequence
|
||||||
|
name: sequence
|
|
@ -0,0 +1,85 @@
|
||||||
|
---
|
||||||
|
title: "Sequence"
|
||||||
|
weight: 20
|
||||||
|
type: "docs"
|
||||||
|
---
|
||||||
|
|
||||||
|
Sequence CRD provides a way to define an in-order list of functions that will
|
||||||
|
be invoked. Each step can modify, filter or create a new kind of an event.
|
||||||
|
Sequence creates `Channel`s and `Subscription`s under the hood.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Sequence Spec
|
||||||
|
|
||||||
|
Sequence has three parts for the Spec:
|
||||||
|
|
||||||
|
1. `Steps` which defines the in-order list of `Subscriber`s, aka, which functions
|
||||||
|
are executed in the listed order. These are specified using the
|
||||||
|
`eventingv1alpha1.SubscriberSpec` just like you would when creating `Subscription`.
|
||||||
|
Each step should be `Callable`.
|
||||||
|
1. `ChannelTemplate` defines the Template which will be used to create `Channel`s
|
||||||
|
between the steps.
|
||||||
|
1. `Reply` (Optional) Reference to where the results of the final step in the
|
||||||
|
sequence are sent to.
|
||||||
|
|
||||||
|
### Sequence Status
|
||||||
|
|
||||||
|
Sequence has four parts for the Status:
|
||||||
|
|
||||||
|
1. Conditions which detail the overall Status of the Sequence object
|
||||||
|
1. ChannelStatuses which convey the Status of underlying `Channel` resources that
|
||||||
|
are created as part of this Sequence. It is an array and each Status corresponds to the Step number,
|
||||||
|
so the first entry in the array is the Status of the `Channel` before the first Step.
|
||||||
|
1. SubscriptionStatuses which convey the Status of underlying `Subscription` resources that
|
||||||
|
are created as part of this Sequence. It is an array and each Status corresponds to the Step number, so
|
||||||
|
the first entry in the array is the `Subscription` which is created to wire the first channel to the
|
||||||
|
first step in the `Steps` array.
|
||||||
|
1. AddressStatus which is exposed so that Sequence can be used where Addressable can be used. Sending
|
||||||
|
to this address will target the `Channel` which is fronting the first Step in the Sequence.
|
||||||
|
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
For each of these examples below, we'll use
|
||||||
|
[`CronJobSource`](https://knative.dev/docs/eventing/samples/cronjob-source/)
|
||||||
|
as the source of events.
|
||||||
|
|
||||||
|
We also use a very simple [transformer](https://github.com/vaikas-google/transformer) which
|
||||||
|
performs very trivial transformation of the incoming events to demonstrate they have passed
|
||||||
|
through each stage.
|
||||||
|
|
||||||
|
### (Sequence with no reply (terminal last Step))[./samples/sequence/sequence-terminal/README.md)
|
||||||
|
|
||||||
|
For the first example, we'll use a 3 Step `Sequence` that is wired directly into the `CronJobSource`.
|
||||||
|
Each of the steps simply tacks on "- Handled by <STEP NUMBER>", for example the first Step in the
|
||||||
|
`Sequence` will take the incoming message and append "- Handled by 0" to the incoming message.
|
||||||
|
|
||||||
|
### [Sequence with reply (last Step produces output)](./samples/sequence/sequence-reply-to-event-display/README.md)
|
||||||
|
|
||||||
|
For the next example, we'll use the same 3 Step `Sequence` that is wired directly into the `CronJobSource`.
|
||||||
|
Each of the steps simply tacks on "- Handled by <STEP NUMBER>", for example the first Step in the
|
||||||
|
`Sequence` will take the incoming message and append "- Handled by 0" to the incoming message.
|
||||||
|
|
||||||
|
The only difference is that we'll use the `Subscriber.Spec.Reply` field to wire the output of the
|
||||||
|
last Step to an event display pod.
|
||||||
|
|
||||||
|
### [Chaining Sequences together](./samples/sequence/sequence-reply-to-sequence/README.md)
|
||||||
|
|
||||||
|
For the next example, we'll use the same 3 Step `Sequence` that is wired directly into the `CronJobSource`.
|
||||||
|
Each of the steps simply tacks on "- Handled by <STEP NUMBER>", for example the first Step in the
|
||||||
|
`Sequence` will take the incoming message and append "- Handled by 0" to the incoming message.
|
||||||
|
|
||||||
|
The only difference is that we'll use the `Subscriber.Spec.Reply` field to wire the output of the
|
||||||
|
last Step to another `Sequence` that does the smae message modifications as the first pipeline (with
|
||||||
|
different steps however).
|
||||||
|
|
||||||
|
### [Using Sequence with Broker/Trigger model](./samples/sequence/sequence-with-broker-trigger/README.md)
|
||||||
|
|
||||||
|
You can also create a Trigger which targets `Sequence`. This time we'll wire `CronJobSource` to send
|
||||||
|
events to a `Broker` and then we'll have the `Sequence` emit the resulting Events back into the Broker
|
||||||
|
so that the results of the `Sequence` can be observed by other `Trigger`s.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue