已从事件源或生产者发送到通道的事件可以使用订阅转发到一个或多个接收器。您可以通过配置Subscription
对象来创建订阅,该对象指定通道和使用该通道发送的事件的接收器(也称为订阅者)。
创建通道和事件接收器后,您可以创建订阅以启用事件传递。使用 OpenShift Container Platform Web 控制台提供简化的直观用户界面来创建订阅。
OpenShift Serverless Operator、Knative Serving 和 Knative Eventing 已安装在您的 OpenShift Container Platform 集群上。
您已登录到 Web 控制台。
您已创建事件接收器(例如 Knative 服务)和通道。
您已创建项目或有权访问具有在 OpenShift Container Platform 中创建应用程序和其他工作负载的相应角色和权限的项目。
在**开发者**视角中,导航到**拓扑**页面。
使用以下方法之一创建订阅
将鼠标悬停在您要为其创建订阅的通道上,然后拖动箭头。将显示**添加订阅**选项。
在**订阅者**列表中选择您的接收器。
单击**添加**。
如果服务在与通道相同的命名空间或项目下的**拓扑**视图中可用,请单击您要为其创建订阅的通道,然后将箭头直接拖动到服务,以立即从通道到该服务创建订阅。
创建订阅后,您可以在**拓扑**视图中看到它表示为连接通道和服务的线。
创建通道和事件接收器后,您可以创建订阅以启用事件传递。使用 YAML 文件创建 Knative 资源使用声明式 API,这使您可以声明性和可重复的方式描述订阅。要使用 YAML 创建订阅,您必须创建一个定义Subscription
对象的 YAML 文件,然后使用oc apply
命令应用它。
OpenShift Serverless Operator 和 Knative Eventing 已安装在集群上。
安装 OpenShift CLI(oc
)。
您已创建项目或有权访问具有在 OpenShift Container Platform 中创建应用程序和其他工作负载的相应角色和权限的项目。
创建Subscription
对象
创建一个 YAML 文件并将以下示例代码复制到其中
apiVersion: messaging.knative.dev/v1
kind: Subscription
metadata:
name: my-subscription (1)
namespace: default
spec:
channel: (2)
apiVersion: messaging.knative.dev/v1
kind: Channel
name: example-channel
delivery: (3)
deadLetterSink:
ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: error-handler
subscriber: (4)
ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: event-display
1 | 订阅的名称。 |
2 | 订阅连接到的通道的配置设置。 |
3 | 事件传递的配置设置。这告诉订阅无法传递到订阅者的事件会发生什么。配置此设置后,无法消费的事件将发送到deadLetterSink 。事件将被丢弃,不会尝试重新传递事件,并且系统中会记录错误。deadLetterSink 值必须是Destination。 |
4 | 订阅者的配置设置。这是从通道传递事件的事件接收器。 |
应用 YAML 文件
$ oc apply -f <filename>
创建通道和事件接收器后,您可以创建订阅以启用事件传递。使用 Knative(kn
)CLI 创建订阅比直接修改 YAML 文件提供了更简化和直观的界面。您可以使用kn subscription create
命令和相应的标志来创建订阅。
OpenShift Serverless Operator 和 Knative Eventing 已安装在您的 OpenShift Container Platform 集群上。
您已安装 Knative(kn
)CLI。
您已创建项目或有权访问具有在 OpenShift Container Platform 中创建应用程序和其他工作负载的相应角色和权限的项目。
创建订阅以连接 sink 到 channel
$ kn subscription create <subscription_name> \
--channel <group:version:kind>:<channel_name> \ (1)
--sink <sink_prefix>:<sink_name> \ (2)
--sink-dead-letter <sink_prefix>:<sink_name> (3)
1 | --channel 指定应处理的云事件的源。您必须提供 channel 名称。如果您不使用由Channel 自定义资源支持的默认InMemoryChannel channel,则必须使用指定 channel 类型的<group:version:kind> 作为 channel 名称的前缀。例如,对于 Apache Kafka 支持的 channel,这将是messaging.knative.dev:v1beta1:KafkaChannel 。 |
2 | --sink 指定应将事件传递到的目标目的地。默认情况下,<sink_name> 被解释为与订阅位于同一命名空间中的此名称的 Knative 服务。您可以使用以下前缀之一来指定 sink 的类型
|
3 | 可选:--sink-dead-letter 是一个可选标志,可用于指定在事件未能传递的情况下应将事件发送到的 sink。有关更多信息,请参见 OpenShift Serverless 的《事件传递》文档。示例命令
示例输出
|
要确认 channel 是否通过订阅连接到事件 sink(或订阅者),请列出现有订阅并检查输出
$ kn subscription list
NAME CHANNEL SUBSCRIBER REPLY DEAD LETTER SINK READY REASON
mysubscription Channel:mychannel ksvc:event-display True
删除订阅
$ kn subscription delete <subscription_name>
创建 channel 和事件 sink(也称为订阅者)后,您可以创建订阅以启用事件传递。订阅是通过配置Subscription
对象创建的,该对象指定 channel 和要向其传递事件的订阅者。您还可以指定一些特定于订阅者的选项,例如如何处理故障。
OpenShift Serverless Operator 和 Knative Eventing 已安装在您的 OpenShift Container Platform 集群上。
您已登录到 Web 控制台,并且处于**管理员**视角。
您拥有 OpenShift Container Platform 的集群管理员权限,或者您拥有 AWS 上的 Red Hat OpenShift Service 或 OpenShift Dedicated 的集群或专用管理员权限。
您已创建了一个 Knative channel。
您已创建了一个用作订阅者的 Knative 服务。
在 OpenShift Container Platform Web 控制台的**管理员**视角中,导航到**无服务器** → **事件**。
在**Channel**选项卡中,选择要添加订阅的 channel 的选项菜单。
单击列表中的**添加订阅**。
在**添加订阅**对话框中,为订阅选择一个**订阅者**。订阅者是从 channel 接收事件的 Knative 服务。
单击**添加**。
配置事件传递参数,这些参数适用于事件未能传递到事件 sink 的情况。