文章目录

前言

虽然目前遇到的所有Broker设计问题都似乎得到了解决,但还是希望能够借鉴更多优秀的代码设计思路。Java开源的Broker代码都有局限性,而免费开源的完整的速度快的MQTT Broker也就只有EMQ了,没有办法只能花时间研究Erlang和EMQ源码了。首先需要搭建Erlang的IDE,之前用IDEA来作为Lua的IDE,没想到IDEA还能作为Erlang的IDE,实在是太好用了。

一、用IDEA搭建Erlang集成开发环境

搭建流程已经放到了wiki:软件安装手册 → 《Erlang + Windows + IDEA IDE环境搭建》,这里重复地描述下重要步骤。

1、去Erlang官网下载对应的Erlang程序

官网地址:http://www.erlang.org/downloads

下载链接:如果知道版本就会很简单,只需要替换对应版本的部分,例如下载21.3:

  • 源码:http://erlang.org/download/otp_src_21.3.tar.gz
  • win32:http://erlang.org/download/otp_win32_21.3.exe 
  • win64:http://erlang.org/download/otp_win64_21.3.exe

官网打开可能会很慢,但下载还算能够接受,可以去CSDN找一些资源下载会快一些。

  • EMQ 2.3.11 的编译版本是 Erlang OTP 20.0,想要学习MQTT3.1/3.1.1的可以看2.x版本代码 
  • EMQ X 3.1-beta.1 Released 的编译版本是Erlang OTP 21.2,想要学习MQTT5.0的可以看3.x的代码

我下载的20.0.1。

2、安装Erlang

1)正常安装EXE

2)配置Path环境变量,例如:E:\erl10.0.1\bin

3)测试是否安装成功:cmd → erl:  

3、配置IDEA的Erlang插件

1)打开IDEA,文件 → 设置 → 插件,搜索Erlang,界面提示本地们找到,是否搜索库:

 2)搜索仓库,在线安装Erlang插件

 3)重启IDEA 

4、配置Rebar3

rebar3用来编译Erlang程序。

)下载rebar3 打开IDEA,文件 → 设置 → 其他设置 → Erlang扩展工具 → 点击Download the latest rebar3:

选择合适的文件夹,下载后,会自动填充路径:

2)设置rebar3为编译器 设置 → 构建、执行和部署 → 编译器 → Erlang编译器 → 勾选Compile project with rebar、Add debug info:

5、Erlang Hello World

1)文件 → 新建项目 → Erlang:

2)配置SDK为Erlang安装根目录,会自动识别Erlang:

3)建立一个名为hello的Erlang的文件 

4)将默认生成的代码改为Helloworld

默认生成代码:

%% API
-export([]).

Helloworld: 

-export([start/0]).

start() ->
  io:fwrite("Hello, world!\n").

5) 配置编译

右上角选择编译结构

 增加一个Erlang Application

选择工程、选择要使用哪个模块的哪个函数来启动 

 6)启动程序

7、配置文档

默认文档是去网上在线查的,这里改成本地查。

选择文件 → 项目结构 → SDKs → Erlang 21 → 增加本地的doc文件目录:

可以顺便把网上查的删掉。

ctrl+Q就可以查系统函数了:  

8、用rebar.config来编译,用app.src来运行

EMQ的所有项目都不是直接运行,而是编写rebar.config的,这样可以用rebar.lock去控制插件版本,就和前端的package.json、package-lock.json类似:

xxx.app.src则是入口,例如emqx-2.3.11首先会启动这些代码:

1)建立rebar.config

{escript_incl_extra,[{"priv/templates/*","."}]}.

{erl_opts,
  [
    debug_info,
    {src_dirs,
      [
        "src"
      ]}
  ]
}.

{pre_hooks,[]}.

{cover_enabled, true}.
{sub_dirs,[
  "src"
]}.

2)建立hello.app.src(OTP application resource file)

注意这里直接写带“.”的名字会报错,需要先写hello,再重命名为hello.app.src。

如果写的是hello.erl,mod则写hello:

{application, hello, [
  {description, ""},
  {vsn, "1"},
  {registered, []},
  {applications, [
    kernel,
    stdlib
  ]},
  {mod, {hello, []}},
  {env, []}
]}.



3)配置erlang rebar编译

命令写compile,跳过依赖编译。

4)执行rebar编译:

如果直接执行,会报错,原因是之前设置的rebar3路径被清空了,重新配置一次,这次不用Download了,直接选择。

设置→其他设置→Erlang扩展工具→Path:

 再编译就能通过了:

5)执行编译后的程序

找到编译后hello.app、hello.beam的路径:

重新配置一个erlang application,将working directory配置成相应路径:

执行hello2,会产生和之前一样的结果:

二、导入EMQ项目

我下载的最后一个EMQ2.3.11版本代码,直接导入是不会高亮的,我们先用IDEA建立一个空的Erlang工程,然后将EMQ代码复制到该工程下,重新打开工程,就会语法高亮了:

可以用Ctrl+点击来跳转函数来源代码,和IntelliJ全家桶逻辑一致。

注意去标记对应的目录:


转载请注明出处http://www.bewindoweb.com/255.html | 三颗豆子
分享许可方式知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
重大发现:转载注明原文网址的同学刚买了彩票就中奖,刚写完代码就跑通,刚转身就遇到了真爱。
你可能还会喜欢
具体问题具体杠