序列¶
序列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
的结果可以被其他触发器观察到。