跳到内容

Sequence

Sequence CRD 提供了一种定义将按顺序调用的函数列表的方法。每个步骤都可以修改、过滤或创建一种新的事件。Sequence 在底层创建 ChannelSubscription

信息

Sequence 需要“回路 (hairpin)”流量。请验证您的 pod 是否可以通过服务 IP 访问自身。如果“回路”流量不可用,您可以联系您的集群管理员,因为它是一个集群级别的(通常是 CNI)设置。

用法

Sequence 规范

Sequence 的 Spec 包含三个部分

  1. Steps 定义了 Subscriber 的有序列表,即按给定顺序执行哪些函数。这些是使用 messaging.v1.SubscriberSpec 指定的,就像您创建 Subscription 时一样。每个步骤都应该是 Addressable
  2. ChannelTemplate 定义了用于在步骤之间创建 Channel 的模板。
  3. Reply (可选) 对序列中最后一步的结果发送到的位置的引用。

Sequence 状态

Sequence 的 Status 包含四个部分

  1. Conditions 详细说明了 Sequence 对象的总体状态
  2. ChannelStatuses 传达了作为此 Sequence 一部分创建的底层 Channel 资源的的状态。它是一个数组,每个 Status 对应于 Step 编号,因此数组中的第一个条目是第一个 Step 之前的 Channel 的状态。
  3. SubscriptionStatuses 传达了作为此 Sequence 一部分创建的底层 Subscription 资源的的状态。它是一个数组,每个 Status 对应于 Step 编号,因此数组中的第一个条目是创建用于将第一个 channel 连接到 Steps 数组中第一个步骤的 Subscription
  4. AddressStatus 被暴露出来,以便 Sequence 可以在需要 Addressable 的地方使用。发送到此地址将目标定为位于 Sequence 中第一个步骤前面的 Channel

示例

对于以下每个示例,您将使用一个 PingSource 作为事件源。

我们还使用一个非常简单的 转换器 (transformer) 来对传入事件执行非常简单的转换,以证明它们已通过每个阶段。

没有回复的 Sequence

对于第一个示例,我们将使用一个 3 步 Sequence,它直接连接到 PingSource。每个步骤都会简单地附加 “- Handled by”,例如 Sequence 中的第一个步骤将接收传入消息并在其中附加 “- Handled by 0”。

参见 没有回复的 Sequence (最后一个步骤是终端)

有回复的 Sequence

对于下一个示例,我们将使用相同的 3 步 Sequence,它直接连接到 PingSource。每个步骤都会简单地附加 “- Handled by”,例如 Sequence 中的第一个步骤将接收传入消息并在其中附加 “- Handled by 0”。

唯一的区别是我们将使用 Subscriber.Spec.Reply 字段将最后一个步骤的输出连接到事件显示 pod。

参见 有回复的 Sequence (最后一个步骤产生输出)

将多个 Sequence 链接起来

对于下一个示例,我们将使用相同的 3 步 Sequence,它直接连接到 PingSource。每个步骤都会简单地附加 “- Handled by”,例如 Sequence 中的第一个步骤将接收传入消息并在其中附加 “- Handled by 0”。

唯一的区别是我们将使用 Subscriber.Spec.Reply 字段将最后一个步骤的输出连接到另一个 Sequence,该 Sequence 执行与第一个管道相同的消息修改(但使用不同的步骤)。

参见 将多个 Sequence 链接起来

将 Sequence 与 Broker/Trigger 模型一起使用

您还可以创建一个目标为 Sequence 的 Trigger。这次我们将 PingSource 连接起来以向 Broker 发送事件,然后我们将让 Sequence 将结果事件发射回 Broker,以便其他 Trigger 可以观察到 Sequence 的结果。

参见 将 Sequence 与 Broker/Trigger 模型一起使用

我们使用分析和 cookie 来了解网站流量。有关您使用我们网站的信息会与 Google 共享以达到此目的。了解更多。