序列¶
序列CRD提供了一种方法来定义将被调用的函数的按顺序列表。 每个步骤都可以修改、筛选或创建一种新的事件类型。 序列在底层创建“频道”和“订阅”。
Info
序列需要"hairpin"流量。 请验证您的 Pod 可以通过服务IP到达自己。 如果"hairpin"流量不可用,您可以联系您的集群管理员,因为这是一个集群级别(通常是CNI)设置。
使用¶
序列规范¶
序列有三个部分的规范:
Steps,它定义了Subscriber的按顺序列表,也就是按列出的顺序执行的函数。 这些是使用messaging.v1.SubscriberSpec指定的,就像创建Subscription时一样。 每个步骤都应该是Addressable。ChannelTemplate定义了用于在步骤之间创建Channel的模板。Reply(可选)引用序列中最后一步的结果被发送到的位置。
序列状态¶
序列有四个部分的状态:
- 详细描述序列对象的整体状态的条件
ChannelStatuses,它传递作为该序列一部分创建的底层“通道”资源的状态 它是一个数组,每个Status对应于Step号, 因此数组中的第一个条目是第一个Step之前的Channel的Status。SubscriptionStatuses,它传递作为该序列的一部分创建的底层“订阅”资源的状态。 它是一个数组,每个Status对应于Step号,因此数组中的第一个条目是“Subscription”, 创建它是为了将第一个通道连接到“Steps”数组中的第一个步骤。AddressStatus是公开的,以便Sequence可以在可以使用Addressable的地方使用。 发送到此地址将针对序列中第一步前面的Channel。
例子¶
对于下面的每个示例,都使用PingSource作为事件源。
我们还使用一个非常简单的转换器,它对传入的事件执行非常简单的转换,以演示它们已经通过了每个阶段。
无应答序列¶
对于第一个例子,我们将使用直接连接到PingSource的3步Sequence。
每个步骤都简单地附加在- Handled by <STEP NUMBER>上,例如Sequence中的第一个步骤将接受传入消息并将"- Handled by 0"附加到传入消息。
有应答序列¶
对于下一个例子,我们将使用直接连接到PingSource的相同的3步Sequence。
每个步骤都简单地附加在- Handled by <STEP NUMBER>上,例如Sequence中的第一个步骤将接受传入消息并将"- Handled by 0"附加到传入消息。
唯一的区别是我们将使用Subscriber.Spec.Reply字段将最后一步的输出连接到事件显示Pod。
将序列链接在一起¶
对于下一个例子,我们将使用直接连接到PingSource的相同的3步Sequence 。
每个步骤都简单地附加在- Handled by <STEP NUMBER>上,例如Sequence中的第一个步骤将接受传入消息并将"- Handled by 0"附加到传入消息。
唯一的区别是,我们将使用Subscriber.Spec.Reply字段将最后一步的输出连接到另一个Sequence,该Sequence执行与第一个管道相同的消息修改(只是步骤不同)。
参见将序列连接在一起.
使用带有代理/触发器模型的序列¶
你也可以创建一个目标为Sequence的触发器。
这次我们将连接PingSource将事件发送到Broker,然后我们将让Sequence将产生的事件发送回Broker,以便Sequence的结果可以被其他触发器观察到。