Skip to content

Commit

Permalink
GITBOOK-113: No subject
Browse files Browse the repository at this point in the history
  • Loading branch information
mouuii authored and gitbook-bot committed Sep 4, 2024
1 parent d816ffa commit 433a8c8
Showing 1 changed file with 8 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ Event事件管理机制主要有三部分组成:

## 源码分析

### Event资源数据结构
### 1.Event资源数据结构

```go
// pkg/apis/core/types.go
Expand Down Expand Up @@ -118,9 +118,9 @@ type Event struct {

```

###  EventBroadcaster源码分析
###  2.EventBroadcaster源码分析

#### 4.1 EventRecorder记录事件(事件生产者)
#### 2.1 EventRecorder记录事件(事件生产者)

* EventRecorder

Expand Down Expand Up @@ -273,7 +273,7 @@ func (recorder *recorderImpl) makeEvent(ref *v1.ObjectReference, annotations map

generateEvent方法调用ActionOrDrop方法,将事件写入到incoming中:

#### 4.2 EventBroadcaster事件广播(事件消费者)
#### 2.2 EventBroadcaster事件广播(事件消费者)

* EventBroadcaster

Expand Down Expand Up @@ -479,7 +479,7 @@ func (m *Broadcaster) closeAll() {

关闭了incoming,从loop方法可以看出来,将会结束对incoming的遍历动作,关闭所有watcher的result通道,清空watcher。

#### 4.3 broadcasterWatcher事件的处理
#### 2.3 broadcasterWatcher事件的处理

\
eventBroadcasterImpl实现的三种Event的处理方法:
Expand Down Expand Up @@ -636,7 +636,7 @@ func (mw *broadcasterWatcher) ResultChan() <-chan Event {
}
```

#### 4.4 事件处理逻辑
#### 2.4 事件处理逻辑

对于StartLogging、StartStructuredLogging方式,都是把事件信息当做日志打印了一下。这里主要看一下StartRecordingToSink方法,StartRecordingToSink封装的StartEventWatcher方法里面会处理事件消费者分发的事件,并回调recordToSink方法,对收到 events 后会进行缓存、过滤、聚合而后发送到 apiserver,apiserver 会将 events 保存到 etcd 中。下面着重分析下recordToSink方法。

Expand Down Expand Up @@ -809,7 +809,7 @@ func (e *eventLogger) eventObserve(newEvent *v1.Event, key string) (*v1.Event, [

eventObserve方法里面会去查找缓存中的记录,然后对count进行自增后更新到缓存中。

### 5、使用示例
### 2.使用示例

```go
const (
Expand All @@ -833,7 +833,7 @@ c.recorder.Event(user, corev1.EventTypeNormal, successSynced, messageResourceSyn

StartRecordingToSink会调用StartEventWatcher,StartEventWatcher方法里面会异步的调用 watcher.ResultChan()方法获取到broadcasterWatcher的result管道,result管道里面的数据就是Broadcaster的distribute方法进行分发的。

### 6、总结
### 4.总结

&#x20; 了解完 events 的整个处理流程后,再梳理一下整个流程:

Expand Down

0 comments on commit 433a8c8

Please sign in to comment.