Sequence wired to another Sequence
The functions used in these examples live in https://github.com/knative/eventing/blob/main/cmd/appender/main.go.
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.
Setup
Change default
in the following command to create the steps in the namespace where you want resources created:
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.
apiVersion: flows.knative.dev/v1
kind: Sequence
metadata:
name: first-sequence
spec:
channelTemplate:
apiVersion: messaging.knative.dev/v1
kind: InMemoryChannel
steps:
- ref:
apiVersion: serving.knative.dev/v1
kind: Service
- ref:
apiVersion: serving.knative.dev/v1
name: second
- ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: third
reply:
ref:
kind: Sequence
apiVersion: flows.knative.dev/v1
name: second-sequence
Change default
in the following command to create the Sequence
in the namespace where you want your resources created:
kubectl -n default create -f ./sequence1.yaml
kubectl -n default create -f ./sequence2.yaml
Create the Service displaying the events created by Sequence
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: event-display
spec:
template:
containerers:
Change default
in the following command to create the Sequence
in the namespace where you want your resources created:
kubectl -n default create -f ./event-display.yaml
This will create a PingSource which will send a CloudEvent with {"message": "Hello world!"}
as the data payload every 2 minutes.
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.
kubectl -n default get pods
kubectl -n default logs -l serving.knative.dev/service=event-display -c user-container --tail=-1
☁️ cloudevents.Event
Validation: valid
Context Attributes,
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,
And you can see that the initial PingSource message ("Hello World!")
has been appended to it by each of the steps in the Sequence.