通道是自定义资源,定义了单一的事件转发和持久层。事件从事件源或生产者发送到通道后,可以使用订阅将这些事件发送到多个 Knative 服务或其他接收器。
您可以通过实例化受支持的Channel
对象来创建通道,并通过修改Subscription
对象的delivery
规范来配置重新交付尝试。
创建Channel
对象后,变异接收 Webhook 会根据默认通道实现为Channel
对象添加一组spec.channelTemplate
属性。例如,对于InMemoryChannel
默认实现,Channel
对象如下所示
apiVersion: messaging.knative.dev/v1
kind: Channel
metadata:
name: example-channel
namespace: default
spec:
channelTemplate:
apiVersion: messaging.knative.dev/v1
kind: InMemoryChannel
然后,通道控制器根据spec.channelTemplate
配置创建后端通道实例。
创建后无法更改 |
当此机制与前面的示例一起使用时,将创建两个对象:一个通用的后端通道和一个InMemoryChannel
通道。如果您使用的是不同的默认通道实现,则InMemoryChannel
将被特定于您的实现的通道替换。例如,使用 Apache Kafka 的 Knative 代理,将创建KafkaChannel
通道。
后端通道充当代理,它将它的订阅复制到用户创建的通道对象,并设置用户创建的通道对象的 status 来反映后端通道的状态。
OpenShift Serverless 支持InMemoryChannel
和KafkaChannel
通道实现。由于InMemoryChannel
通道的局限性,建议仅将其用于开发用途。您可以将KafkaChannel
通道用于生产环境。
以下是InMemoryChannel
类型通道的限制:
没有事件持久性。如果 Pod 宕机,则该 Pod 上的事件将丢失。
InMemoryChannel
通道不实现事件排序,因此同时在通道中接收到的两个事件可以以任何顺序传递给订阅者。
如果订阅者拒绝事件,则默认情况下不会进行重新传递尝试。您可以通过修改Subscription
对象的delivery
规范来配置重新传递尝试。