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:

    1. 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.

    1. apiVersion: flows.knative.dev/v1
    2. kind: Sequence
    3. metadata:
    4. name: first-sequence
    5. spec:
    6. channelTemplate:
    7. apiVersion: messaging.knative.dev/v1
    8. kind: InMemoryChannel
    9. steps:
    10. - ref:
    11. apiVersion: serving.knative.dev/v1
    12. kind: Service
    13. - ref:
    14. apiVersion: serving.knative.dev/v1
    15. name: second
    16. - ref:
    17. apiVersion: serving.knative.dev/v1
    18. kind: Service
    19. name: third
    20. reply:
    21. ref:
    22. kind: Sequence
    23. apiVersion: flows.knative.dev/v1
    24. name: second-sequence

    Change default in the following command to create the Sequence in the namespace where you want your resources created:

    1. kubectl -n default create -f ./sequence1.yaml
    1. kubectl -n default create -f ./sequence2.yaml

    Create the Service displaying the events created by Sequence

    1. apiVersion: serving.knative.dev/v1
    2. kind: Service
    3. metadata:
    4. name: event-display
    5. spec:
    6. template:
    7. containerers:

    Change default in the following command to create the Sequence in the namespace where you want your resources created:

    1. 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.

    1. 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.

    1. kubectl -n default get pods
    1. kubectl -n default logs -l serving.knative.dev/service=event-display -c user-container --tail=-1
    2. ☁️ cloudevents.Event
    3. Validation: valid
    4. Context Attributes,
    5. specversion: 1.0
    6. type: dev.knative.sources.ping
    7. source: /apis/v1/namespaces/default/pingsources/ping-source
    8. id: 29d531df-78d8-4d11-9ffd-ba24045241a9
    9. time: 2020-03-02T21:18:00.0011708Z
    10. datacontenttype: application/json
    11. Extensions,
    12. 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
    13. traceparent: 00-e5abc9de525a89ead80560b8f328de5c-fc12b64a6296f541-00
    14. Data,
    15. {
    16. "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.