EMQX源码阅读(一)

简述:
EMQX也是使用Erlang语言实现的一个MQTT broker,为了学习并对比一下和自己实现的区别,取长补短,也为了给一些希望学习EMQX源码的童鞋一个大纲性质的引导,我边学习边写下了这三篇文章。
=============================================================
首先都是从目录结构开始了:

  • EMQX
  • etc :看起来像是一些配置文件,后续分析
  • certs:放证书的
  • include:头文件
  • priv:不清楚是啥
  • scripts:启动脚本?
  • src:源代码
  • test:测试代码

仅仅列出了文件夹,子文件未列。

按照启动顺序,走一遍程序:

  1. 通过Makefile调用run_emqx.escript

run_emqx.escript:
a. 加载mnesia库
b. 拼接mnesia本地目录路径并设置
c. 调用emqx_ct_helpers:start_app/4,参数为app名称,emqx.schema文件路径,emqx.conf文件路径,空的匿名函数

emqx_ct_helpers.erl:
发现没有这个文件,查看rebar.config,是引用的其他库
该文件是用于测试流程启动应用的,流程如下:
a. 定义data,etc,log,plugins文件夹
b. 读取配置文件,并拼接上一步的文件路径配置,生成新的配置文件xxx.rendered
c. 读取emqx.schema文件配置,并与config.rendered一起加载到app的环境变量里
d. 回调匿名函数(start变量传入的)
e. 启动app应用,并确保所有关联应用均启动

emqx_app.erl:
a. 启动应用ekka:看起来是一个集群管理和监控的工具,后面再看。
b. 启动主监控树

  1. emqx_kernal_sup:
    1)emqx_pool_sup: 进程池管理器
    2)emqx_hooks: 回调管理器
    3)emqx_stats: 计数器
    4)emqx_metrixs: 返回码或者状态判定
    5)emqx_ctl: 命令行命令管理
    6)emqx_zone: 定义不同的监听器(Listener)域
  2. emqx_router_sup: 对Topic的路由
    1)router pool
    2)router helper
  3. emqx_broker_sup: 功能处理逻辑:订阅,取消订阅,发布
    1)broker pool
    2)share subscribe (MQTT5.0新特性,暂不管)
    3)broker helper
  4. emqx_cm_sup: channel manager
    1)emqx_banned: 黑名单?
    2)emqx_flapping:Flapping检测?
    3)emqx_cm_locker: 客户端session锁
    4)emqx_cm_registry:开启或关闭Channel
    5)emqx_cm:channel manager主要人口
  5. emqx_sys_sup: 主要是一些监控进程
    1)emqx_sys
    2)emqx_sys_mon
    3)emqx_os_mon
    4)emqx_vm_mon

c. 模块加载
d. 插件初始化和加载
e. 确认成功启动listener

  1. 启动MQTT/TCP: esockd模块
  2. 启动MQTT/SSL: esockd模块
  3. 启动MQTT/WS: cowboy模块
  4. 启动MQTT/WSS:cowboy模块
    esockd模块,后续再解释,启动时会将emqx_connection回调传过去
    cowboy模块,回调为emqx_ws_connection

f. 启动ekka,auto_cluster
g. 加载emqx_alarm 告警模块

到此,整个服务启动完成,下一篇会继续探索emqx客户端连接行为。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容