We use analytics and cookies to understand site traffic. Information about your use of our site is shared with Google for that purpose. Learn more.
Multiple Cases
We are going to create a Parallel with two branches:
- the first branch accepts events with a time that is is even
- the second branch accepts events with a time that is is odd
The events produced by each branch are then sent to the event-display
service.
Prerequisites
Please refer to the sample overview for the prerequisites.
Create the Knative Services
Let's first create the filter and transformer services that we will use in our Parallel.
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: even-filter
spec:
template:
spec:
containers:
- image: villardl/filter-nodejs:0.1
env:
- name: FILTER
value: |
Math.round(Date.parse(event.time) / 60000) % 2 === 0
---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: odd-filter
spec:
template:
spec:
containers:
- image: villardl/filter-nodejs:0.1
env:
- name: FILTER
value: |
Math.round(Date.parse(event.time) / 60000) % 2 !== 0
---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: even-transformer
spec:
template:
spec:
containers:
- image: villardl/transformer-nodejs
env:
- name: TRANSFORMER
value: |
({"message": "we are even!"})
---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: odd-transformer
spec:
template:
spec:
containers:
- image: villardl/transformer-nodejs:0.1
env:
- name: TRANSFORMER
value: |
({"message": "this is odd!"})
.
kubectl create -f ./filters.yaml -f ./transformers.yaml
Create the Service displaying the events created by Sequence
apiVersion: serving.knative.dev/v1
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.
kubectl -n default create -f ./event-display.yaml
Create the Parallel
The parallel.yaml
file contains the specifications for creating the Parallel.
apiVersion: flows.knative.dev/v1alpha1
kind: Parallel
metadata:
name: odd-even-parallel
spec:
channelTemplate:
apiVersion: messaging.knative.dev/v1alpha1
kind: InMemoryChannel
branches:
- filter:
ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: even-filter
subscriber:
ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: even-transformer
- filter:
ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: odd-filter
subscriber:
ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: odd-transformer
reply:
ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: event-display
kubectl create -f ./parallel.yaml
Create the CronJobSource targeting the Parallel
This will create a CronJobSource which will send a CloudEvent with {“message”: “Even or odd?"} as the data payload every minute.
apiVersion: sources.eventing.knative.dev/v1alpha1
kind: CronJobSource
metadata:
name: cronjob-source
spec:
schedule: "*/1 * * * *"
data: '{"message": "Even or odd?"}'
sink:
ref:
apiVersion: flows.knative.dev/v1alpha1
kind: Parallel
name: odd-even-parallel
kubectl 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 minute, it might
take some time for the events to show up in the logs.
Let's look at the event-display
log:
kubectl logs -l serving.knative.dev/service=event-display --tail=30 -c user-container
☁️ cloudevents.Event
Validation: valid
Context Attributes,
specversion: 0.3
type: dev.knative.cronjob.event
source: /apis/v1/namespaces/default/cronjobsources/cronjob-source
id: 2884f4a3-53f2-4926-a32c-e696a6fb3697
time: 2019-07-31T18:10:00.000309586Z
datacontenttype: application/json; charset=utf-8
Extensions,
knativehistory: odd-even-parallel-kn-parallel-0-kn-channel.default.svc.cluster.local, odd-even-parallel-kn-parallel-kn-channel.default.svc.cluster.local
Data,
{
"message": "we are even!"
}
☁️ cloudevents.Event
Validation: valid
Context Attributes,
specversion: 0.3
type: dev.knative.cronjob.event
source: /apis/v1/namespaces/default/cronjobsources/cronjob-source
id: 2e519f11-3b6f-401c-b196-73f8b235de58
time: 2019-07-31T18:11:00.002649881Z
datacontenttype: application/json; charset=utf-8
Extensions,
knativehistory: odd-even-parallel-kn-parallel-1-kn-channel.default.svc.cluster.local, odd-even-parallel-kn-parallel-kn-channel.default.svc.cluster.local
Data,
{
"message": "this is odd!"
}