跳过到内容

连接到 event-display 的 Sequence

我们将创建以下逻辑配置。我们创建一个 PingSource,将事件馈送到 Sequence,然后获取该 Sequence 的输出并显示结果输出。

Logical Configuration

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

先决条件

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

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

设置

创建 Knative 服务

将以下命令中的 default 更改为要创建步骤的命名空间

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

sequence.yaml 文件包含创建 Sequence 的规范。如果您使用的是不同类型的 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
  reply:
    ref:
      kind: Service
      apiVersion: serving.knative.dev/v1
      name: event-display

将以下命令中的 default 更改为要创建 Sequence 的命名空间

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

创建显示由 Sequence 创建的事件的服务

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: event-display
spec:
  template:
    spec:
      containers:
        - image: gcr.io/knative-releases/knative.dev/eventing/cmd/event_display

将以下命令中的 default 更改为要创建 Sequence 的命名空间

kubectl -n default create -f ./event-display.yaml

创建目标为 Sequence 的 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

检查结果

您现在可以通过检查 event-display pod 的日志来查看最终输出。

kubectl -n default get pods

等待片刻,然后查看 event-display pod 的日志

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: 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,
    "message": "Hello world! - Handled by 0 - Handled by 1 - Handled by 2"
  }

您会看到初始 PingSource 消息 ("Hello World!") 已被 Sequence 中的每个步骤追加到它。

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