Broker 和 Trigger
Broker 和 Trigger
https://knative.dev/docs/eventing/broker/
Broker
Broker代表了 “Event Mesh”。事件被发送到Broker的入口(Ingress),然后被发送到对该事件感兴趣的任何订阅者。一旦进入Broker,除CloudEvent之外的所有元数据都会被剥离(例如,除非设置为CloudEvent属性,否则没有该事件如何进入Broker的概念)。
可以有不同类别的Broker,围绕事件的耐久性、性能等提供不同类型的语义。这些例子中使用了Knative Eventing repo中的Broker,它使用Knative Channels来投递事件。
简单的例子,显示broker的配置是在ConfigMap config-br-default-channel中指定的,它使用InMemoryChannel。
例子:
apiVersion: eventing.knative.dev/v1
kind: Broker
metadata:
annotations:
eventing.knative.dev/broker.class: MTChannelBasedBroker
name: default
spec:
# Configuration specific to this broker.
config:
apiVersion: v1
kind: ConfigMap
name: config-br-default-channel
namespace: knative-eventing
更复杂的例子,显示了与上面相同的Broker,但失败的事件被传送到名为dlq-service的Knative服务。
apiVersion: eventing.knative.dev/v1
kind: Broker
metadata:
annotations:
eventing.knative.dev/broker.class: MTChannelBasedBroker
name: default
spec:
# Configuration specific to this broker.
config:
apiVersion: v1
kind: ConfigMap
name: config-br-default-channel
namespace: knative-eventing
# Where to deliver Events that failed to be processed.
delivery:
deadLetterSink:
ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: dlq-service
使用默认值创建broker
Knative Eventing提供了一个ConfigMap,默认情况下,这个ConfigMap位于knative-eventing命名空间,被称为default-br-config。开箱即用,它被配置为创建基于MT channel的broker。如果您使用的是不同的Broker实现,您应该相应地修改ConfigMap。
apiVersion: v1
kind: ConfigMap
metadata:
name: config-br-defaults
namespace: knative-eventing
labels:
eventing.knative.dev/release: v0.16.0
data:
# Configuration for defaulting channels that do not specify CRD implementations.
default-br-config: |
clusterDefault:
brokerClass: MTChannelBasedBroker
apiVersion: v1
kind: ConfigMap
name: config-br-default-channel
namespace: knative-eventing
有了这个ConfigMap,任何创建的Broker都将被配置为使用MTChannelBasedBroker,并且Broker.Spec.Config将按照clusterDefault配置中指定的配置。所以,下面的例子将在默认命名空间中创建一个名为default的Broker,并使用MTChannelBasedBroker作为实现。
kubectl create -f - <<EOF
apiVersion: eventing.knative.dev/v1
kind: Broker
metadata:
name: default
namespace: default
EOF
在defaults-br-config中指定的默认值将导致以下broker被创建。
apiVersion: eventing.knative.dev/v1
kind: Broker
metadata:
annotations:
eventing.knative.dev/broker.class: MTChannelBasedBroker
name: default
namespace: default
spec:
config:
apiVersion: v1
kind: ConfigMap
name: config-br-default-channel
namespace: knative-eventing
Trigger
Trigger 代表了从特定的Broker订阅事件的愿望。
一个简单的例子,它将从给定的(default)broker那里接收所有的事件,并将它们传递给Knative服务my-service。
kubectl create -f - <<EOF
apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
name: my-service-trigger
spec:
broker: default
subscriber:
ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: my-service
EOF
使用Ping source发送事件
Knative Eventing自带了一个Ping Source,它可以按照配置好的时间表发射事件。为此,我们将把它配置为每分钟发送一次事件,说,是的,你猜对了,Hello World!。
kubectl create -f - <<EOF
apiVersion: sources.knative.dev/v1alpha2
kind: PingSource
metadata:
name: test-ping-source
spec:
schedule: "*/1 * * * *"
jsonData: '{"message": "Hello world!"}'
sink:
ref:
# Deliver events to Broker.
apiVersion: eventing.knative.dev/v1
kind: Broker
name: default
EOF