热门标签 | 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监控树下的进程)


推荐阅读
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 本文深入解析了通过JDBC实现ActiveMQ消息持久化的机制。JDBC能够将消息可靠地存储在多种关系型数据库中,如MySQL、SQL Server、Oracle和DB2等。采用JDBC持久化方式时,数据库会自动生成三个关键表:`activemq_msgs`、`activemq_lock`和`activemq_ACKS`,分别用于存储消息数据、锁定信息和确认状态。这种机制不仅提高了消息的可靠性,还增强了系统的可扩展性和容错能力。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 修复一个 Bug 竟耗时两天?真的有那么复杂吗?
    修复一个 Bug 竟然耗费了两天时间?这背后究竟隐藏着怎样的复杂性?本文将深入探讨这个看似简单的 Bug 为何会如此棘手,从代码层面剖析问题根源,并分享解决过程中遇到的技术挑战和心得。 ... [详细]
  • 解决 Windows Server 2016 网络连接问题
    本文详细介绍了如何解决 Windows Server 2016 在使用无线网络 (WLAN) 和有线网络 (以太网) 时遇到的连接问题。包括添加必要的功能和安装正确的驱动程序。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • Unity与MySQL连接过程中出现的新挑战及解决方案探析 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 在CICS应用环境中,众多客户端通过网络与CICS服务器进行连接。系统管理员可以通过CICS系统交易CEMT查询当前连接的客户端信息。然而,在非客户端模式下,识别用户连接并解决信息获取错误的问题变得更为复杂。本文将探讨如何在CICS服务器端准确识别非客户端模式的用户连接,并提供有效的解决方案,以确保系统的稳定性和数据的准确性。此外,还将介绍一些常用的诊断工具和技术,帮助管理员快速定位和解决问题。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • 深入解析Spring Boot启动过程中Netty异步架构的工作原理与应用
    深入解析Spring Boot启动过程中Netty异步架构的工作原理与应用 ... [详细]
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社区 版权所有