Sequence¶
Sequence CRD 提供了一种定义将按顺序调用的函数列表的方法。每个步骤都可以修改、过滤或创建一种新的事件。Sequence 在底层创建 Channel 和 Subscription。
信息
Sequence 需要“回路 (hairpin)”流量。请验证您的 pod 是否可以通过服务 IP 访问自身。如果“回路”流量不可用,您可以联系您的集群管理员,因为它是一个集群级别的(通常是 CNI)设置。
用法¶
Sequence 规范¶
Sequence 的 Spec 包含三个部分
Steps定义了Subscriber的有序列表,即按给定顺序执行哪些函数。这些是使用messaging.v1.SubscriberSpec指定的,就像您创建Subscription时一样。每个步骤都应该是Addressable。ChannelTemplate定义了用于在步骤之间创建Channel的模板。Reply(可选) 对序列中最后一步的结果发送到的位置的引用。
Sequence 状态¶
Sequence 的 Status 包含四个部分
- Conditions 详细说明了 Sequence 对象的总体状态
- ChannelStatuses 传达了作为此 Sequence 一部分创建的底层
Channel资源的的状态。它是一个数组,每个 Status 对应于 Step 编号,因此数组中的第一个条目是第一个 Step 之前的Channel的状态。 - SubscriptionStatuses 传达了作为此 Sequence 一部分创建的底层
Subscription资源的的状态。它是一个数组,每个 Status 对应于 Step 编号,因此数组中的第一个条目是创建用于将第一个 channel 连接到Steps数组中第一个步骤的Subscription。 - AddressStatus 被暴露出来,以便 Sequence 可以在需要 Addressable 的地方使用。发送到此地址将目标定为位于 Sequence 中第一个步骤前面的
Channel。
示例¶
对于以下每个示例,您将使用一个 PingSource 作为事件源。
我们还使用一个非常简单的 转换器 (transformer) 来对传入事件执行非常简单的转换,以证明它们已通过每个阶段。
没有回复的 Sequence¶
对于第一个示例,我们将使用一个 3 步 Sequence,它直接连接到 PingSource。每个步骤都会简单地附加 “- Handled bySequence 中的第一个步骤将接收传入消息并在其中附加 “- Handled by 0”。
参见 没有回复的 Sequence (最后一个步骤是终端)。
有回复的 Sequence¶
对于下一个示例,我们将使用相同的 3 步 Sequence,它直接连接到 PingSource。每个步骤都会简单地附加 “- Handled bySequence 中的第一个步骤将接收传入消息并在其中附加 “- Handled by 0”。
唯一的区别是我们将使用 Subscriber.Spec.Reply 字段将最后一个步骤的输出连接到事件显示 pod。
参见 有回复的 Sequence (最后一个步骤产生输出)。
将多个 Sequence 链接起来¶
对于下一个示例,我们将使用相同的 3 步 Sequence,它直接连接到 PingSource。每个步骤都会简单地附加 “- Handled bySequence 中的第一个步骤将接收传入消息并在其中附加 “- Handled by 0”。
唯一的区别是我们将使用 Subscriber.Spec.Reply 字段将最后一个步骤的输出连接到另一个 Sequence,该 Sequence 执行与第一个管道相同的消息修改(但使用不同的步骤)。
将 Sequence 与 Broker/Trigger 模型一起使用¶
您还可以创建一个目标为 Sequence 的 Trigger。这次我们将 PingSource 连接起来以向 Broker 发送事件,然后我们将让 Sequence 将结果事件发射回 Broker,以便其他 Trigger 可以观察到 Sequence 的结果。