跳转到内容

Sequence

Sequence CRD 提供了一种定义按顺序执行的函数列表的方式。每个步骤都可以修改、过滤或创建新的事件类型。Sequence 在幕后创建 ChannelSubscription

信息

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

用法

Sequence Spec

Sequence 的 Spec 有三个部分

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

Sequence Status

Sequence 的 Status 有四个部分

  1. Conditions 详细说明 Sequence 对象的整体 Status
  2. ChannelStatuses 传达作为此 Sequence 的一部分创建的底层 Channel 资源的 Status。它是一个数组,每个 Status 对应于步骤号,因此数组中的第一个条目是第一个步骤之前的 Channel 的 Status。
  3. SubscriptionStatuses 传达作为此 Sequence 的一部分创建的底层 Subscription 资源的 Status。它是一个数组,每个 Status 对应于步骤号,因此数组中的第一个条目是创建用于将第一个通道连接到 Steps 数组中的第一个步骤的 Subscription
  4. AddressStatus 公开,以便 Sequence 可用于可以使用 Addressable 的地方。发送到此地址将针对第一个步骤中面向第一个步骤的 Channel

示例

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

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

没有回复的 Sequence

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

请参阅 没有回复的 Sequence(终止最后一步)

带有回复的 Sequence

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

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

请参阅 带有回复的 Sequence(最后一步产生输出)

将 Sequences 连接在一起

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

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

请参阅 将 Sequences 连接在一起

使用 Broker/Trigger 模型与 Sequence

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

请参阅 使用 Broker/Trigger 模型与 Sequence

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