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