热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

emqtt源码学习(1)---初识emq

emq简介emq为mqtt的erlang实现,看了官方文档总觉得不太给力,所以决定开始emq代码探索之旅,能力有限,如有错误请大家指正。今天是第一站,emqtt源码学习(1)—初识emq.

emq简介

emq为mqtt的erlang实现,看了官方文档总觉得不太给力,所以决定开始emq代码探索之旅,能力有限,如有错误请大家指正。今天是第一站,emqtt源码学习(1)—初识emq.

emq的启动

emqttd_app.erl :

start(_Type, _Args) ->
%% emq启动时会打印提示信息
print_banner(),
%% ekka是一个类zookeeper的东东,emq集群相关功能基于该应用
ekka:start(),
%% 启动emq监控进程,该进程下会挂载许多emq核心功能进程
{ok, Sup} = emqttd_sup:start_link(),
%% 在emq监控进程下,启动核心功能进程
start_servers(Sup),
%% cli:commnad line interface,该语句实现命令行功能,如用户通过 emqttd start 启动程序,事实上该命令将会转换为对应的erlang调用。该模块实现通过命令行对emq application中的参数进行设置查询,提供一种在程序运行过程中实时修改相关参数的接口,比如修改mqtt.client.max_publish_rate。
emqttd_cli:load(),
%% 加载acl认证模块
register_acl_mod(),
%% 该语句做两个事情,第一,绑定ekka模块的回调函数,包括prepar以及reboot的回调函数,可以认为该语句实现了ekka的一些配置。第二,如需要启动相应的插件,如校验插件,这里的插件指的是erlang 的application。第三,也是最重要的是启动了服务监听端口,包括tcp(esocked),加密tcp,web socket,加密websocket,这些监听模块都是第三方开源框架
start_autocluster(),
%% 注册名字
register(emqttd, self()),
%%打印版本信息
print_vsn(),
{ok, Sup}.

我第一次看这部分代码的时候对ekka产生了浓厚的兴趣,因为之前了解过zookeeper,初步认定这个ekka也是类似的吧,大概看了ekka的代码,基本证实了我的认定。

ekka和emq什么关系

先上个图:
这里写图片描述

如上图所示,emq基于ekka,ekka又基于mnesia,不同层作用也不一样,以mnesia为例,该应用其实就是erlang的分布式数据库,ekka就是通过mneisa进行集群管理,比如调用mnesia:system_info(running_db_nodes) 可以获取当前健康的mnesia节点,调用mnesia:system_info(db_nodes)可以获取mnesia包含的所有节点db_nodes > running_db_nodes时就表明有节点故障了。

下一站我们会游览emq其他核心功能模块(挂在在emqttd监控树下的进程)


推荐阅读
  • J2EE平台集成了多种服务、API和协议,旨在支持基于Web的多层应用开发。本文将详细介绍J2EE平台中的13项关键技术规范,涵盖从数据库连接到事务处理等多个方面。 ... [详细]
  • 本文档提供了详细的MySQL安装步骤,包括解压安装文件、选择安装类型、配置MySQL服务以及设置管理员密码等关键环节,帮助用户顺利完成MySQL的安装。 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • oracle 对硬件环境要求,Oracle 10G数据库软硬件环境的要求 ... [详细]
  • 电商高并发解决方案详解
    本文以京东为例,详细探讨了电商中常见的高并发解决方案,包括多级缓存和Nginx限流技术,旨在帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文总结了近年来在实际项目中使用消息中间件的经验和常见问题,旨在为Java初学者和中级开发者提供实用的参考。文章详细介绍了消息中间件在分布式系统中的作用,以及如何通过消息中间件实现高可用性和可扩展性。 ... [详细]
  • PHP函数的工作原理与性能分析
    在编程语言中,函数是最基本的组成单元。本文将探讨PHP函数的特点、调用机制以及性能表现,并通过实际测试给出优化建议。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • Kafka 是由 Apache 软件基金会开发的高性能分布式消息系统,支持高吞吐量的发布和订阅功能,主要使用 Scala 和 Java 编写。本文将深入解析 Kafka 的安装与配置过程,为程序员提供详尽的操作指南,涵盖从环境准备到集群搭建的每一个关键步骤。 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • Hadoop 2.6 主要由 HDFS 和 YARN 两大部分组成,其中 YARN 包含了运行在 ResourceManager 的 JVM 中的组件以及在 NodeManager 中运行的部分。本文深入探讨了 Hadoop 2.6 日志文件的解析方法,并详细介绍了 MapReduce 日志管理的最佳实践,旨在帮助用户更好地理解和优化日志处理流程,提高系统运维效率。 ... [详细]
  • 酷家乐 Serverless FaaS 产品实践探索
    本文探讨了酷家乐在 Serverless FaaS 领域的实践与经验,重点介绍了 FaaS 平台的构建、业务收益及未来发展方向。 ... [详细]
  • 本文探讨了在一个物理隔离的环境中构建数据交换平台所面临的挑战,包括但不限于数据加密、传输监控及确保文件交换的安全性和可靠性。同时,作者结合自身项目经验,分享了项目规划、实施过程中的关键决策及其背后的思考。 ... [详细]
  • RocketMQ 运维监控实践指南
    本文详细介绍了如何实现 RocketMQ 的运维监控,包括监控平台的搭建、常用运维命令及其具体用法。适合对 RocketMQ 监控感兴趣的读者参考。 ... [详细]
  • RocketMQ在秒杀时的应用
    目录一、RocketMQ是什么二、broker和nameserver2.1Broker2.2NameServer三、MQ在秒杀场景下的应用3.1利用MQ进行异步操作3. ... [详细]
author-avatar
时间熔金-岁月铅华_758
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有