摘要: 在最新的 Knative Eventing 0.6 版本中新增了 Registry 特性, 为什么要增加这个特性, 该特性是如何实现的。针对这些问题,希望通过本篇文章给出答案。
作为事件消费者,之前是无法事先知道哪些事件可以被消费,如果能通过某种方式获得哪些 Broker 提供哪些事件,那么事件消费者就能很方便通过这些 Broker 消费事件。Registry 就是在这样的背景下被提出的,通过 Registry 机制,消费者能针对特定的 Broker 的事件通过 Trigger 进行事件订阅消费。这里需要说明一下,Registry 设计与实现目前是针对 Broker/Trigger 事件处理模型。
定义 EventType CRD 资源
定义 EventType 类型的CRD资源,示例yaml:
事件注册与发现
1.创建 EventType
一般我们通过以下两种方式创建 EventType 实现事件的注册。
1.1通过Event 事件源实例自动注册
基于事件源实例,通过事件源控制器创建 EventType 进行注册:
通过运行上面的yaml信息,通过GitHubSource 事件源控制器可以创建事件类型dev.knative.source.github.push以及事件类型dev.knative.source.github.pull_request这两个EventType进行注册,其中source为github.com以及名称为default的Broker。具体如下:
这里有两点需要注意:
spec.type
加上了
dev.knative.source.github.
前缀,这个也需要进一步讨论确定是否合理。
1.2手动注册
直接通过创建EventType CR资源实现注册,如:
通过这种方式可以注册名称为
org.bitbucket.repofork
, type 为
org.bitbucket.repo:fork
, source 为
bitbucket.org
以及属于
dev
Broker 的 EventType。
2.获取 Registry 的事件注册
事件消费者可以通过如下方式获取 Registry 的事件注册列表:
$ kubectl get eventtypes -n default
3.Trigger订阅事件
最后基于事件注册列表信息,事件消费者创建对应的Trigger对Registry中的EventType进行监听消费
Trigger示例:
针对 Registry,一般可能涉及到有如下问题:
subject
字段过滤资源
subject
字段, 因为我们认为
subject
是更高级别的过滤设置。不过社区后续会通过
高级过滤规则
进行实现。例如:
本文作者:元毅
本文为云栖社区原创内容,未经允许不得转载。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69915408/viewspace-2645096/ ,如需转载,请注明出处,否则将追究法律责任。