跳至内容

序列终端

我们将创建以下逻辑配置。我们创建一个 PingSource,将事件馈送到一个 序列。序列可以进行外部工作,也可以在带外创建额外的事件。

Logical Configuration

这些示例中使用的函数位于 https://github.com/knative/eventing/blob/main/cmd/appender/main.go

先决条件

在本示例中,我们假设您已设置 InMemoryChannel 以及 Knative Serving(用于我们的函数)。示例使用 default 命名空间,如果您要部署到其他命名空间,则需要修改示例以反映这一点。

如果您想使用不同类型的 Channel,则必须修改 Sequence.Spec.ChannelTemplate 以创建相应的 Channel 资源。

设置

创建 Knative 服务

首先创建将在步骤中引用的三个步骤。

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: first
spec:
  template:
    spec:
      containers:
        - image: gcr.io/knative-releases/knative.dev/eventing/cmd/appender
          env:
            - name: MESSAGE
              value: " - Handled by 0"

---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: second
spec:
  template:
    spec:
      containers:
        - image: gcr.io/knative-releases/knative.dev/eventing/cmd/appender
          env:
            - name: MESSAGE
              value: " - Handled by 1"
---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: third
spec:
  template:
    spec:
      containers:
        - image: gcr.io/knative-releases/knative.dev/eventing/cmd/appender
          env:
            - name: MESSAGE
              value: " - Handled by 2"
---
kubectl -n default create -f ./steps.yaml

创建序列

sequence.yaml 文件包含用于创建序列的规范。如果您使用的是不同类型的 Channel,则需要更改 spec.channelTemplate 以指向您想要的 Channel。

apiVersion: flows.knative.dev/v1
kind: Sequence
metadata:
  name: sequence
spec:
  channelTemplate:
    apiVersion: messaging.knative.dev/v1
    kind: InMemoryChannel
  steps:
    - ref:
        apiVersion: serving.knative.dev/v1
        kind: Service
        name: first
    - ref:
        apiVersion: serving.knative.dev/v1
        kind: Service
        name: second
    - ref:
        apiVersion: serving.knative.dev/v1
        kind: Service
        name: third

更改以下命令中的 default,以便在您要创建资源的命名空间中创建 序列

kubectl -n default create -f ./sequence.yaml

创建目标序列的 PingSource

这将创建一个 PingSource,它将每 2 分钟发送一个带有 {"message": "Hello world!"} 作为数据有效载荷的 CloudEvent。

apiVersion: sources.knative.dev/v1
kind: PingSource
metadata:
  name: ping-source
spec:
  schedule: "*/2 * * * *"
  contentType: "application/json"
  data: '{"message": "Hello world!"}'
  sink:
    ref:
      apiVersion: flows.knative.dev/v1
      kind: Sequence
      name: sequence
kubectl -n default create -f ./ping-source.yaml

检查结果

您现在可以通过检查事件显示 pod 的日志来查看最终输出。请注意,由于我们将 PingSource 设置为每 2 分钟发出一次,因此事件可能需要一段时间才能显示在日志中。

kubectl -n default get pods

让我们看一下 序列 中第一个 步骤 的日志

kubectl -n default logs -l serving.knative.dev/service=first -c user-container --tail=-1

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}
您可以看到,初始 PingSource 消息 ("Hello World!") 现在已由序列中的第一步修改,其中包括 " - Handled by 0"。令人兴奋!:)

然后我们可以查看 序列 中第二步的输出

kubectl -n default logs -l serving.knative.dev/service=second -c user-container --tail=-1

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}
正如预期的那样,它现在已被第一步和第二步处理,如消息现在是 "Hello world! - Handled by 0 - Handled by 1" 所反映。

然后我们可以查看 序列 中最后一步的输出

kubectl -n default logs -l serving.knative.dev/service=third -c user-container --tail=-1

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}

我们使用分析和 Cookie 来了解网站流量。有关您使用我们网站的信息将与 Google 共享,以用于该目的。 了解更多。