做爲事件消費者,以前是沒法事先知道哪些事件能夠被消費,若是能經過某種方式得到哪些 Broker 提供哪些事件,那麼事件消費者就能很方便經過這些 Broker 消費事件。Registry 就是在這樣的背景下被提出的,經過 Registry 機制,消費者能針對特定的 Broker 的事件經過 Trigger 進行事件訂閱消費。這裏須要說明一下,Registry 設計與實現目前是針對 Broker/Trigger 事件處理模型。git
定義 EventType 類型的CRD資源,示例yaml:github
apiVersion: eventing.knative.dev/v1alpha1 kind: EventType metadata: name: com.github.pullrequest namespace: default spec: type: com.github.pull_request source: github.com schema: //github.com/schemas/pull_request description: "GitHub pull request" broker: default
1.建立 EventType
通常咱們經過如下兩種方式建立 EventType 實現事件的註冊。
1.1經過Event 事件源實例自動註冊
基於事件源實例,經過事件源控制器建立 EventType 進行註冊:express
apiVersion: sources.eventing.knative.dev/v1alpha1 kind: GitHubSource metadata: name: github-source-sample namespace: default spec: eventTypes: - push - pull_request ownerAndRepository: my-other-user/my-other-repo accessToken: secretKeyRef: name: github-secret key: accessToken secretToken: secretKeyRef: name: github-secret key: secretToken sink: apiVersion: eventing.knative.dev/v1alpha1 kind: Broker name: default
經過運行上面的yaml信息,經過GitHubSource 事件源控制器能夠建立事件類型dev.knative.source.github.push以及事件類型dev.knative.source.github.pull_request這兩個EventType進行註冊,其中source爲github.com以及名稱爲default的Broker。具體以下:api
apiVersion: eventing.knative.dev/v1alpha1 kind: EventType metadata: generateName: dev.knative.source.github.push- namespace: default owner: # Owned by github-source-sample spec: type: dev.knative.source.github.push source: github.com broker: default --- apiVersion: eventing.knative.dev/v1alpha1 kind: EventType metadata: generateName: dev.knative.source.github.pullrequest- namespace: default owner: # Owned by github-source-sample spec: type: dev.knative.source.github.pull_request source: github.com broker: default
這裏有兩點須要注意:spa
spec.type
加上了dev.knative.source.github.
前綴,這個也須要進一步討論肯定是否合理。1.2手動註冊
直接經過建立EventType CR資源實現註冊,如:設計
apiVersion: eventing.knative.dev/v1alpha1 kind: EventType metadata: name: org.bitbucket.repofork namespace: default spec: type: org.bitbucket.repo:fork source: bitbucket.org broker: dev description: "BitBucket fork"
經過這種方式能夠註冊名稱爲org.bitbucket.repofork
, type 爲 org.bitbucket.repo:fork
, source 爲 bitbucket.org
以及屬於dev
Broker 的 EventType。code
2.獲取 Registry 的事件註冊
事件消費者能夠經過以下方式獲取 Registry 的事件註冊列表:
$ kubectl get eventtypes -n default事件
NAME TYPE SOURCE SCHEMA BROKER DESCRIPTION READY REASON org.bitbucket.repofork org.bitbucket.repo:fork bitbucket.org dev BitBucket fork False BrokerIsNotReady com.github.pullrequest com.github.pull_request github.com //github.com/schemas/pull_request default GitHub pull request True dev.knative.source.github.push-34cnb dev.knative.source.github.push github.com default True dev.knative.source.github.pullrequest-86jhv dev.knative.source.github.pull_request github.com default True
3.Trigger訂閱事件
最後基於事件註冊列表信息,事件消費者建立對應的Trigger對Registry中的EventType進行監聽消費
Trigger示例:ip
apiVersion: eventing.knative.dev/v1alpha1 kind: Trigger metadata: name: my-service-trigger namespace: default spec: filter: sourceAndType: type: dev.knative.source.github.push source: github.com subscriber: ref: apiVersion: serving.knative.dev/v1alpha1 kind: Service name: my-service
針對 Registry,通常可能涉及到有以下問題:資源
subject
字段過濾資源subject
字段, 由於咱們認爲subject
是更高級別的過濾設置。不過社區後續會經過高級過濾規則 進行實現。例如:apiVersion: eventing.knative.dev/v1alpha1 kind: Trigger metadata: name: only-knative spec: filter: cel: expression: ce.subject.match("/knative/*") subscriber: ref: apiVersion: serving.knative.dev/v1alpha1 kind: Service name: knative-events-processor
原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。