kubeedge-beehive源码解析

个人认为beehive是kubeedge的通讯的核心模块,将beehive看明白基本上就理解一半hubeedge的工作机制了。首先我将beehive核心代码目录拿出来,大家看下:

上面的目录是我将kubeedge里的重要部分拿出来的,下面依次说下:

1、module.go core.go文件

如上图所示 module是一个接口,上一篇文章已经说过kubeedge包含了几个重要的模块,都已经实现了这个接口。然后这些模块初始化时,根据配置文件的配置状态到modules map[string]Module结构中,然后在遍历modules,依次启动相应的服务。依次启动服务的代码如下:


注意:函数中的参数sync.WaitGroup是我为了写demo自己增加的,原函数是不存在的。

2、message.go文件很简单,就是定义message的格式。这里大家应该都可以看明白就不再累赘了。

3、context目录--这个目录我认为是beehive的核心,首先看下context.go文件,这里面定义了核心beehiveContext对象的结构:

type beehiveContext struct {

        moduleContext ModuleContext

       messageContext MessageContext

       ctx context.Context

       cancel context.CancelFunc

}

其中ModuleContext与MessageContext均为接口,具体定义如下:

type ModuleContext interface {

    AddModule(module string)

    AddModuleGroup(module, group string)

    Cleanup(module string)

}

type MessageContext interface {

    Send(module string, message model.Message)

    Receive(module string) (model.Message, error)

    SendSync(module string, message model.Message, timeout time.Duration) (model.Message, error)

    SendResp(message model.Message)

    //group broadcast

      SendToGroup(moduleType string, message model.Message)

    SendToGroupSync(moduleType string, message model.Message, timeout time.Duration)error

}

然后我们看conetxt_factory.go文件,从名字可以得知,他是采用工厂模式创建了一个context对象,具体实现为InitContext函数

这个函数中首先创建了beehiveContext对象,然后根据传入的contextType创建了MsgCtxTypeChannel类型的ChannelContext对象,将beehiveContext的moduleContext、messageContext同时赋值为ChannelContext对象,可想而之,ChannelContext对象同时实现了上面的两个接口的所有方法。

最后我们看下context_channel.go文件,可以确定ChannelContext确实实现了上述接口的所有方法,具体结构如下:

type ChannelContext struct {

//ConfigFactory goarchaius.ConfigurationFactory

  channels map[string]chan model.Message

  chsLock sync.RWMutex

  typeChannels map[string]map[string]chan model.Message

  typeChsLock sync.RWMutex

  anonChannels map[string]chan model.Message

  anonChsLock sync.RWMutex

}

至此beehive的工作流程已经完成。

你可能感兴趣的:(kubeedge-beehive源码解析)