Flow v1beta1 (#2264)
* update example to use v1beta1 api * WIP: update flow doc to v1beta1 * update pictures * fix links
|
@ -6,7 +6,7 @@ type: "docs"
|
|||
---
|
||||
|
||||
We are going to create the following logical configuration. We create a
|
||||
CronJobSource, feeding events to a [`Sequence`](../../../sequence.md), then
|
||||
PingSource, feeding events to a [`Sequence`](../../../flows/sequence.md), then
|
||||
taking the output of that `Sequence` and displaying the resulting output.
|
||||
|
||||

|
||||
|
@ -86,13 +86,13 @@ If you are using a different type of Channel, you need to change the
|
|||
spec.channelTemplate to point to your desired Channel.
|
||||
|
||||
```yaml
|
||||
apiVersion: flows.knative.dev/v1alpha1
|
||||
apiVersion: flows.knative.dev/v1beta1
|
||||
kind: Sequence
|
||||
metadata:
|
||||
name: sequence
|
||||
spec:
|
||||
channelTemplate:
|
||||
apiVersion: messaging.knative.dev/v1alpha1
|
||||
apiVersion: messaging.knative.dev/v1beta1
|
||||
kind: InMemoryChannel
|
||||
steps:
|
||||
- ref:
|
||||
|
@ -142,28 +142,28 @@ your resources to be created.
|
|||
kubectl -n default create -f ./event-display.yaml
|
||||
```
|
||||
|
||||
### Create the CronJobSource targeting the Sequence
|
||||
### Create the PingSource targeting the Sequence
|
||||
|
||||
This will create a CronJobSource which will send a CloudEvent with {"message":
|
||||
This will create a PingSource 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
|
||||
apiVersion: sources.knative.dev/v1alpha1
|
||||
kind: PingSource
|
||||
metadata:
|
||||
name: cronjob-source
|
||||
name: ping-source
|
||||
spec:
|
||||
schedule: "*/2 * * * *"
|
||||
data: '{"message": "Hello world!"}'
|
||||
sink:
|
||||
ref:
|
||||
apiVersion: flows.knative.dev/v1alpha1
|
||||
apiVersion: flows.knative.dev/v1beta1
|
||||
kind: Sequence
|
||||
name: sequence
|
||||
```
|
||||
|
||||
```shell
|
||||
kubectl -n default create -f ./cron-source.yaml
|
||||
kubectl -n default create -f ./ping-source.yaml
|
||||
```
|
||||
|
||||
### Inspecting the results
|
||||
|
@ -175,19 +175,22 @@ pods.
|
|||
kubectl -n default get pods
|
||||
```
|
||||
|
||||
Then look at the logs for the event-display pod:
|
||||
Wait a bit and 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
|
||||
kubectl -n default logs -l serving.knative.dev/service=event-display -c user-container --tail=-1
|
||||
☁️ 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
|
||||
specversion: 1.0
|
||||
type: samples.http.mode3
|
||||
source: /apis/v1/namespaces/default/pingsources/ping-source
|
||||
id: e8fa7906-ab62-4e61-9c13-a9406e2130a9
|
||||
time: 2020-03-02T20:52:00.0004957Z
|
||||
datacontenttype: application/json
|
||||
Extensions,
|
||||
knativehistory: sequence-kn-sequence-0-kn-channel.default.svc.cluster.local; sequence-kn-sequence-1-kn-channel.default.svc.cluster.local; sequence-kn-sequence-2-kn-channel.default.svc.cluster.local
|
||||
traceparent: 00-6e2947379387f35ddc933b9190af16ad-de3db0bc4e442394-00
|
||||
Data,
|
||||
{
|
||||
"id": 0,
|
||||
|
@ -195,5 +198,5 @@ Data,
|
|||
}
|
||||
```
|
||||
|
||||
And you can see that the initial Cron Source message ("Hello World!") has been
|
||||
And you can see that the initial PingSource message `("Hello World!")` has been
|
||||
appended to it by each of the steps in the Sequence.
|
||||
|
|
|
@ -6,4 +6,4 @@ spec:
|
|||
template:
|
||||
spec:
|
||||
containers:
|
||||
- image: gcr.io/knative-releases/knative.dev/eventing-sources/cmd/event_display
|
||||
- image: gcr.io/knative-releases/knative.dev/eventing-contrib/cmd/event_display
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
apiVersion: sources.eventing.knative.dev/v1alpha1
|
||||
kind: CronJobSource
|
||||
apiVersion: sources.knative.dev/v1alpha1
|
||||
kind: PingSource
|
||||
metadata:
|
||||
name: cronjob-source
|
||||
name: ping-source
|
||||
spec:
|
||||
schedule: "*/2 * * * *"
|
||||
data: '{"message": "Hello world!"}'
|
||||
sink:
|
||||
ref:
|
||||
apiVersion: flows.knative.dev/v1alpha1
|
||||
apiVersion: flows.knative.dev/v1beta1
|
||||
kind: Sequence
|
||||
name: sequence
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 19 KiB |
|
@ -1,10 +1,10 @@
|
|||
apiVersion: flows.knative.dev/v1alpha1
|
||||
apiVersion: flows.knative.dev/v1beta1
|
||||
kind: Sequence
|
||||
metadata:
|
||||
name: sequence
|
||||
spec:
|
||||
channelTemplate:
|
||||
apiVersion: messaging.knative.dev/v1alpha1
|
||||
apiVersion: messaging.knative.dev/v1beta1
|
||||
kind: InMemoryChannel
|
||||
steps:
|
||||
- ref:
|
||||
|
|
|
@ -37,4 +37,6 @@ spec:
|
|||
env:
|
||||
- name: MESSAGE
|
||||
value: " - Handled by 2"
|
||||
- name: TYPE
|
||||
value: "samples.http.mod3"
|
||||
---
|
||||
|
|
|
@ -6,7 +6,7 @@ type: "docs"
|
|||
---
|
||||
|
||||
We are going to create the following logical configuration. We create a
|
||||
CronJobSource, feeding events to a [`Sequence`](../../../sequence.md), then
|
||||
PingSource, feeding events to a [`Sequence`](../../../flows/sequence.md), then
|
||||
taking the output of that `Sequence` and sending it to a second `Sequence` and
|
||||
finally displaying the resulting output.
|
||||
|
||||
|
@ -17,9 +17,9 @@ The functions used in these examples live in
|
|||
|
||||
## Prerequisites
|
||||
|
||||
For this example, we'll assume you have set up a an `InMemoryChannel` as well as
|
||||
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
|
||||
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
|
||||
|
@ -127,13 +127,13 @@ If you are using a different type of Channel, you need to change the
|
|||
spec.channelTemplate to point to your desired Channel.
|
||||
|
||||
```yaml
|
||||
apiVersion: flows.knative.dev/v1alpha1
|
||||
apiVersion: flows.knative.dev/v1beta1
|
||||
kind: Sequence
|
||||
metadata:
|
||||
name: first-sequence
|
||||
spec:
|
||||
channelTemplate:
|
||||
apiVersion: messaging.knative.dev/v1alpha1
|
||||
apiVersion: messaging.knative.dev/v1beta1
|
||||
kind: InMemoryChannel
|
||||
steps:
|
||||
- ref:
|
||||
|
@ -169,13 +169,13 @@ If you are using a different type of Channel, you need to change the
|
|||
spec.channelTemplate to point to your desired Channel.
|
||||
|
||||
```yaml
|
||||
apiVersion: flows.knative.dev/v1alpha1
|
||||
apiVersion: flows.knative.dev/v1beta1
|
||||
kind: Sequence
|
||||
metadata:
|
||||
name: second-sequence
|
||||
spec:
|
||||
channelTemplate:
|
||||
apiVersion: messaging.knative.dev/v1alpha1
|
||||
apiVersion: messaging.knative.dev/v1beta1
|
||||
kind: InMemoryChannel
|
||||
steps:
|
||||
- ref:
|
||||
|
@ -197,6 +197,11 @@ spec:
|
|||
name: event-display
|
||||
```
|
||||
|
||||
|
||||
```shell
|
||||
kubectl -n default create -f ./sequence2.yaml
|
||||
```
|
||||
|
||||
### Create the Service displaying the events created by Sequence
|
||||
|
||||
```yaml
|
||||
|
@ -208,7 +213,7 @@ spec:
|
|||
template:
|
||||
spec:
|
||||
containerers:
|
||||
- image: gcr.io/knative-releases/knative.dev/eventing-sources/cmd/event_display
|
||||
- image: gcr.io/knative-releases/knative.dev/eventing-contrib/cmd/event_display
|
||||
```
|
||||
|
||||
Change `default` below to create the `Sequence` in the Namespace where you want
|
||||
|
@ -218,28 +223,28 @@ your resources created.
|
|||
kubectl -n default create -f ./event-display.yaml
|
||||
```
|
||||
|
||||
### Create the CronJobSource targeting the first Sequence
|
||||
### Create the PingSource 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.
|
||||
This will create a PingSource 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
|
||||
apiVersion: sources.knative.dev/v1alpha1
|
||||
kind: PingSource
|
||||
metadata:
|
||||
name: cronjob-source
|
||||
name: ping-source
|
||||
spec:
|
||||
schedule: "*/2 * * * *"
|
||||
data: '{"message": "Hello world!"}'
|
||||
sink:
|
||||
ref:
|
||||
apiVersion: flows.knative.dev/v1alpha1
|
||||
apiVersion: flows.knative.dev/v1beta1
|
||||
kind: Sequence
|
||||
name: first-sequence
|
||||
```
|
||||
|
||||
```shell
|
||||
kubectl -n default create -f ./cron-source.yaml
|
||||
kubectl -n default create -f ./ping-source.yaml
|
||||
```
|
||||
|
||||
### Inspecting the results
|
||||
|
@ -254,16 +259,19 @@ 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
|
||||
kubectl -n default logs -l serving.knative.dev/service=event-display -c user-container --tail=-1
|
||||
☁️ 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
|
||||
specversion: 1.0
|
||||
type: dev.knative.sources.ping
|
||||
source: /apis/v1/namespaces/default/pingsources/ping-source
|
||||
id: 29d531df-78d8-4d11-9ffd-ba24045241a9
|
||||
time: 2020-03-02T21:18:00.0011708Z
|
||||
datacontenttype: application/json
|
||||
Extensions,
|
||||
knativehistory: first-sequence-kn-sequence-0-kn-channel.default.svc.cluster.local; first-sequence-kn-sequence-1-kn-channel.default.svc.cluster.local; first-sequence-kn-sequence-2-kn-channel.default.svc.cluster.local; second-sequence-kn-sequence-0-kn-channel.default.svc.cluster.local; second-sequence-kn-sequence-1-kn-channel.default.svc.cluster.local; second-sequence-kn-sequence-2-kn-channel.default.svc.cluster.local
|
||||
traceparent: 00-e5abc9de525a89ead80560b8f328de5c-fc12b64a6296f541-00
|
||||
Data,
|
||||
{
|
||||
"id": 0,
|
||||
|
@ -271,5 +279,5 @@ Data,
|
|||
}
|
||||
```
|
||||
|
||||
And you can see that the initial Cron Source message ("Hello World!") has been
|
||||
And you can see that the initial PingSource message `("Hello World!")` has been
|
||||
appended to it by each of the steps in the Sequence.
|
||||
|
|
|
@ -6,4 +6,4 @@ spec:
|
|||
template:
|
||||
spec:
|
||||
containers:
|
||||
- image: gcr.io/knative-releases/knative.dev/eventing-sources/cmd/event_display
|
||||
- image: gcr.io/knative-releases/knative.dev/eventing-contrib/cmd/event_display
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
apiVersion: sources.eventing.knative.dev/v1alpha1
|
||||
kind: CronJobSource
|
||||
apiVersion: sources.knative.dev/v1alpha1
|
||||
kind: PingSource
|
||||
metadata:
|
||||
name: cronjob-source
|
||||
name: ping-source
|
||||
spec:
|
||||
schedule: "*/2 * * * *"
|
||||
data: '{"message": "Hello world!"}'
|
||||
sink:
|
||||
ref:
|
||||
apiVersion: flows.knative.dev/v1alpha1
|
||||
apiVersion: flows.knative.dev/v1beta1
|
||||
kind: Sequence
|
||||
name: first-sequence
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 24 KiB |
|
@ -1,10 +1,10 @@
|
|||
apiVersion: flows.knative.dev/v1alpha1
|
||||
apiVersion: flows.knative.dev/v1beta1
|
||||
kind: Sequence
|
||||
metadata:
|
||||
name: first-sequence
|
||||
spec:
|
||||
channelTemplate:
|
||||
apiVersion: messaging.knative.dev/v1alpha1
|
||||
apiVersion: messaging.knative.dev/v1beta1
|
||||
kind: InMemoryChannel
|
||||
steps:
|
||||
- ref:
|
||||
|
@ -22,5 +22,5 @@ spec:
|
|||
reply:
|
||||
ref:
|
||||
kind: Sequence
|
||||
apiVersion: flows.knative.dev/v1alpha1
|
||||
apiVersion: flows.knative.dev/v1beta1
|
||||
name: second-sequence
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
apiVersion: flows.knative.dev/v1alpha1
|
||||
apiVersion: flows.knative.dev/v1beta1
|
||||
kind: Sequence
|
||||
metadata:
|
||||
name: second-sequence
|
||||
spec:
|
||||
channelTemplate:
|
||||
apiVersion: messaging.knative.dev/v1alpha1
|
||||
apiVersion: messaging.knative.dev/v1beta1
|
||||
kind: InMemoryChannel
|
||||
steps:
|
||||
- ref:
|
||||
|
|
|
@ -6,7 +6,7 @@ type: "docs"
|
|||
---
|
||||
|
||||
We are going to create the following logical configuration. We create a
|
||||
CronJobSource, feeding events to a [`Sequence`](../../../sequence.md). Sequence
|
||||
CronJobSource, feeding events to a [`Sequence`](../../../flows/sequence.md). Sequence
|
||||
can then do either external work, or out of band create additional events.
|
||||
|
||||

|
||||
|
@ -85,13 +85,13 @@ If you are using a different type of Channel, you need to change the
|
|||
spec.channelTemplate to point to your desired Channel.
|
||||
|
||||
```yaml
|
||||
apiVersion: flows.knative.dev/v1alpha1
|
||||
apiVersion: flows.knative.dev/v1beta1
|
||||
kind: Sequence
|
||||
metadata:
|
||||
name: sequence
|
||||
spec:
|
||||
channelTemplate:
|
||||
apiVersion: messaging.knative.dev/v1alpha1
|
||||
apiVersion: messaging.knative.dev/v1beta1
|
||||
kind: InMemoryChannel
|
||||
steps:
|
||||
- ref:
|
||||
|
@ -115,22 +115,22 @@ the resources to be created.
|
|||
kubectl -n default create -f ./sequence.yaml
|
||||
```
|
||||
|
||||
### Create the CronJobSource targeting the Sequence
|
||||
### Create the PingSource targeting the Sequence
|
||||
|
||||
This will create a CronJobSource which will send a CloudEvent with {"message":
|
||||
"Hello world!"} as the data payload every 2 minutes.
|
||||
This will create a PingSource 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
|
||||
apiVersion: sources.knative.dev/v1alpha1
|
||||
kind: PingSource
|
||||
metadata:
|
||||
name: cronjob-source
|
||||
name: ping-source
|
||||
spec:
|
||||
schedule: "*/2 * * * *"
|
||||
data: '{"message": "Hello world!"}'
|
||||
sink:
|
||||
ref:
|
||||
apiVersion: flows.knative.dev/v1alpha1
|
||||
apiVersion: flows.knative.dev/v1beta1
|
||||
kind: Sequence
|
||||
name: sequence
|
||||
```
|
||||
|
@ -139,13 +139,13 @@ 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
|
||||
kubectl -n default create -f ./ping-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
|
||||
pods. Note that since we set the `PingSource` to emit every 2 minutes, it
|
||||
might take some time for the events to show up in the logs.
|
||||
|
||||
```shell
|
||||
|
@ -155,104 +155,41 @@ kubectl -n default get pods
|
|||
Let's look at the logs for the first `Step` in the `Sequence`:
|
||||
|
||||
```shell
|
||||
kubectl -n default logs --tail=50 -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)
|
||||
kubectl -n default logs -l serving.knative.dev/service=first -c user-container --tail=-1
|
||||
|
||||
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
|
||||
|
||||
----------------------------
|
||||
2020/03/02 21:28:00 listening on 8080, appending " - Handled by 0" to events
|
||||
2020/03/02 21:28:01 Received a new event:
|
||||
2020/03/02 21:28:01 [2020-03-02T21:28:00.0010247Z] /apis/v1/namespaces/default/pingsources/ping-source dev.knative.sources.ping: &{Sequence:0 Message:Hello world!}
|
||||
2020/03/02 21:28:01 Transform the event to:
|
||||
2020/03/02 21:28:01 [2020-03-02T21:28:00.0010247Z] /apis/v1/namespaces/default/pingsources/ping-source dev.knative.sources.ping: &{Sequence:0 Message:Hello world! - Handled by 0}
|
||||
```
|
||||
|
||||
Then we can look at the output of the second Step in the `Sequence`:
|
||||
|
||||
```shell
|
||||
kubectl -n default logs --tail=50 -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
|
||||
kubectl -n default logs -l serving.knative.dev/service=second -c user-container --tail=-1
|
||||
|
||||
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
|
||||
|
||||
----------------------------
|
||||
2020/03/02 21:28:02 listening on 8080, appending " - Handled by 1" to events
|
||||
2020/03/02 21:28:02 Received a new event:
|
||||
2020/03/02 21:28:02 [2020-03-02T21:28:00.0010247Z] /apis/v1/namespaces/default/pingsources/ping-source dev.knative.sources.ping: &{Sequence:0 Message:Hello world! - Handled by 0}
|
||||
2020/03/02 21:28:02 Transform the event to:
|
||||
2020/03/02 21:28:02 [2020-03-02T21:28:00.0010247Z] /apis/v1/namespaces/default/pingsources/ping-source dev.knative.sources.ping: &{Sequence:0 Message:Hello world! - Handled by 0 - Handled by 1}
|
||||
```
|
||||
|
||||
And you can see that the initial Cron Source message ("Hello World!") has now
|
||||
And you can see that the initial PingSource 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 --tail=50 -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
|
||||
kubectl -n default logs -l serving.knative.dev/service=third -c user-container --tail=-1
|
||||
|
||||
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
|
||||
|
||||
----------------------------
|
||||
2020/03/02 21:28:03 listening on 8080, appending " - Handled by 2" to events
|
||||
2020/03/02 21:28:03 Received a new event:
|
||||
2020/03/02 21:28:03 [2020-03-02T21:28:00.0010247Z] /apis/v1/namespaces/default/pingsources/ping-source dev.knative.sources.ping: &{Sequence:0 Message:Hello world! - Handled by 0 - Handled by 1}
|
||||
2020/03/02 21:28:03 Transform the event to:
|
||||
2020/03/02 21:28:03 [2020-03-02T21:28:00.0010247Z] /apis/v1/namespaces/default/pingsources/ping-source dev.knative.sources.ping: &{Sequence:0 Message:Hello world! - Handled by 0 - Handled by 1 - Handled by 2}
|
||||
```
|
||||
|
||||
And as expected it's now been handled by both the first and second Step as
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
apiVersion: sources.eventing.knative.dev/v1alpha1
|
||||
kind: CronJobSource
|
||||
apiVersion: sources.knative.dev/v1alpha1
|
||||
kind: PingSource
|
||||
metadata:
|
||||
name: cronjob-source
|
||||
name: ping-source
|
||||
spec:
|
||||
schedule: "*/2 * * * *"
|
||||
data: '{"message": "Hello world!"}'
|
||||
sink:
|
||||
ref:
|
||||
apiVersion: flows.knative.dev/v1alpha1
|
||||
apiVersion: flows.knative.dev/v1beta1
|
||||
kind: Sequence
|
||||
name: sequence
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 13 KiB |
|
@ -1,10 +1,10 @@
|
|||
apiVersion: flows.knative.dev/v1alpha1
|
||||
apiVersion: flows.knative.dev/v1beta1
|
||||
kind: Sequence
|
||||
metadata:
|
||||
name: sequence
|
||||
spec:
|
||||
channelTemplate:
|
||||
apiVersion: messaging.knative.dev/v1alpha1
|
||||
apiVersion: messaging.knative.dev/v1beta1
|
||||
kind: InMemoryChannel
|
||||
steps:
|
||||
- ref:
|
||||
|
|
|
@ -6,15 +6,14 @@ type: "docs"
|
|||
---
|
||||
|
||||
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
|
||||
PingSource, feeding events into the Broker, then we create a `Filter` that
|
||||
wires those events into a [`Sequence`](../../../flows/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.
|
||||
|
||||
## 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
|
||||
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 your broker lives in another Namespace, you
|
||||
will need to modify the examples to reflect this.
|
||||
|
||||
|
@ -28,6 +27,14 @@ The functions used in these examples live in
|
|||
|
||||
## Setup
|
||||
|
||||
### Creating the Broker
|
||||
|
||||
The easiest way to create a Broker is to annotate your namespace:
|
||||
|
||||
```shell
|
||||
kubectl label namespace default knative-eventing-injection=enabled
|
||||
```
|
||||
|
||||
### Create the Knative Services
|
||||
|
||||
Change `default` below to create the steps in the Namespace where you have
|
||||
|
@ -91,13 +98,13 @@ spec.channelTemplate to point to your desired Channel.
|
|||
Also, change the spec.reply.name to point to your `Broker`
|
||||
|
||||
```yaml
|
||||
apiVersion: flows.knative.dev/v1alpha1
|
||||
apiVersion: flows.knative.dev/v1beta1
|
||||
kind: Sequence
|
||||
metadata:
|
||||
name: sequence
|
||||
spec:
|
||||
channelTemplate:
|
||||
apiVersion: messaging.knative.dev/v1alpha1
|
||||
apiVersion: messaging.knative.dev/v1beta1
|
||||
kind: InMemoryChannel
|
||||
steps:
|
||||
- ref:
|
||||
|
@ -115,7 +122,7 @@ spec:
|
|||
reply:
|
||||
ref:
|
||||
kind: Broker
|
||||
apiVersion: eventing.knative.dev/v1alpha1
|
||||
apiVersion: eventing.knative.dev/v1beta1
|
||||
name: default
|
||||
```
|
||||
|
||||
|
@ -126,22 +133,22 @@ configured your `Broker`.
|
|||
kubectl -n default create -f ./sequence.yaml
|
||||
```
|
||||
|
||||
### Create the CronJobSource targeting the Broker
|
||||
### Create the PingSource targeting the Broker
|
||||
|
||||
This will create a CronJobSource which will send a CloudEvent with {"message":
|
||||
This will create a PingSource 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
|
||||
apiVersion: sources.knative.dev/v1alpha1
|
||||
kind: PingSource
|
||||
metadata:
|
||||
name: cronjob-source
|
||||
name: ping-source
|
||||
spec:
|
||||
schedule: "*/2 * * * *"
|
||||
data: '{"message": "Hello world!"}'
|
||||
sink:
|
||||
ref:
|
||||
apiVersion: eventing.knative.dev/v1alpha1
|
||||
apiVersion: eventing.knative.dev/v1beta1
|
||||
kind: Broker
|
||||
name: default
|
||||
```
|
||||
|
@ -154,23 +161,23 @@ 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
|
||||
kubectl -n default create -f ./ping-source.yaml
|
||||
```
|
||||
|
||||
### Create the Trigger targeting the Sequence
|
||||
|
||||
```yaml
|
||||
apiVersion: eventing.knative.dev/v1alpha1
|
||||
apiVersion: eventing.knative.dev/v1beta1
|
||||
kind: Trigger
|
||||
metadata:
|
||||
name: sequence-trigger
|
||||
spec:
|
||||
filter:
|
||||
attributes:
|
||||
type: dev.knative.cronjob.event
|
||||
type: dev.knative.sources.ping
|
||||
subscriber:
|
||||
ref:
|
||||
apiVersion: flows.knative.dev/v1alpha1
|
||||
apiVersion: flows.knative.dev/v1beta1
|
||||
kind: Sequence
|
||||
name: sequence
|
||||
```
|
||||
|
@ -232,16 +239,20 @@ kubectl -n default get pods
|
|||
Then look at the logs for the event-display pod:
|
||||
|
||||
```shell
|
||||
kubectl -n default logs --tail=50 -l serving.knative.dev/service=sequence-display -c user-container
|
||||
kubectl -n default logs -l serving.knative.dev/service=sequence-display -c user-container --tail=-1
|
||||
☁️ 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
|
||||
specversion: 1.0
|
||||
type: samples.http.mod3
|
||||
source: /apis/v1/namespaces/default/pingsources/ping-source
|
||||
id: 159bba01-054a-4ae7-b7be-d4e7c5f773d2
|
||||
time: 2020-03-03T14:56:00.000652027Z
|
||||
datacontenttype: application/json
|
||||
Extensions,
|
||||
knativearrivaltime: 2020-03-03T14:56:00.018390608Z
|
||||
knativehistory: default-kne-trigger-kn-channel.default.svc.cluster.local; sequence-kn-sequence-0-kn-channel.default.svc.cluster.local; sequence-kn-sequence-1-kn-channel.default.svc.cluster.local; sequence-kn-sequence-2-kn-channel.default.svc.cluster.local; default-kne-trigger-kn-channel.default.svc.cluster.local
|
||||
traceparent: 00-e893412106ff417a90a5695e53ffd9cc-5829ae45a14ed462-00
|
||||
Data,
|
||||
{
|
||||
"id": 0,
|
||||
|
@ -249,5 +260,5 @@ Data,
|
|||
}
|
||||
```
|
||||
|
||||
And you can see that the initial Cron Source message ("Hello World!") has been
|
||||
And you can see that the initial PingSource message `{"Hello World!"}` has been
|
||||
appended to it by each of the steps in the Sequence.
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
apiVersion: sources.eventing.knative.dev/v1alpha1
|
||||
kind: CronJobSource
|
||||
metadata:
|
||||
name: cronjob-source
|
||||
spec:
|
||||
schedule: "*/2 * * * *"
|
||||
data: '{"message": "Hello world!"}'
|
||||
sink:
|
||||
ref:
|
||||
apiVersion: eventing.knative.dev/v1alpha1
|
||||
kind: Broker
|
||||
name: default
|
|
@ -6,9 +6,9 @@ spec:
|
|||
template:
|
||||
spec:
|
||||
containers:
|
||||
- image: gcr.io/knative-releases/knative.dev/eventing-sources/cmd/event_display
|
||||
- image: gcr.io/knative-releases/knative.dev/eventing-contrib/cmd/event_display
|
||||
---
|
||||
apiVersion: eventing.knative.dev/v1alpha1
|
||||
apiVersion: eventing.knative.dev/v1beta1
|
||||
kind: Trigger
|
||||
metadata:
|
||||
name: display-trigger
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
apiVersion: sources.knative.dev/v1alpha1
|
||||
kind: PingSource
|
||||
metadata:
|
||||
name: ping-source
|
||||
spec:
|
||||
schedule: "*/2 * * * *"
|
||||
data: '{"message": "Hello world!"}'
|
||||
sink:
|
||||
ref:
|
||||
apiVersion: eventing.knative.dev/v1beta1
|
||||
kind: Broker
|
||||
name: default
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 38 KiB |
|
@ -1,10 +1,10 @@
|
|||
apiVersion: flows.knative.dev/v1alpha1
|
||||
apiVersion: flows.knative.dev/v1beta1
|
||||
kind: Sequence
|
||||
metadata:
|
||||
name: sequence
|
||||
spec:
|
||||
channelTemplate:
|
||||
apiVersion: messaging.knative.dev/v1alpha1
|
||||
apiVersion: messaging.knative.dev/v1beta1
|
||||
kind: InMemoryChannel
|
||||
steps:
|
||||
- ref:
|
||||
|
@ -22,5 +22,5 @@ spec:
|
|||
reply:
|
||||
ref:
|
||||
kind: Broker
|
||||
apiVersion: eventing.knative.dev/v1alpha1
|
||||
apiVersion: eventing.knative.dev/v1beta1
|
||||
name: default
|
||||
|
|
|
@ -33,9 +33,10 @@ spec:
|
|||
template:
|
||||
spec:
|
||||
containers:
|
||||
- image: gcr.io/knative-releases/knative.dev/eventing-contrib/cmd/appender
|
||||
env:
|
||||
- name: MESSAGE
|
||||
value: " - Handled by 2"
|
||||
- name: TYPE
|
||||
value: "samples.http.mod3"
|
||||
|
||||
---
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
apiVersion: eventing.knative.dev/v1alpha1
|
||||
apiVersion: eventing.knative.dev/v1beta1
|
||||
kind: Trigger
|
||||
metadata:
|
||||
name: sequence-trigger
|
||||
|
@ -6,9 +6,9 @@ spec:
|
|||
broker: default
|
||||
filter:
|
||||
attributes:
|
||||
type: dev.knative.cronjob.event
|
||||
type: dev.knative.sources.ping
|
||||
subscriber:
|
||||
ref:
|
||||
apiVersion: flows.knative.dev/v1alpha1
|
||||
apiVersion: flows.knative.dev/v1beta1
|
||||
kind: Sequence
|
||||
name: sequence
|
||||
|
|