1、emqx_backend_mysql_app模块 源码分析
-module(emqx_backend_mysql_app).
-include("mysql/include/emqx_backend_mysql.hrl").
-behaviour(application).
-emqx_plugin(backend).
-export([start/2, stop/1]).
start(_Type, _Args) ->
%% 获取配置文件mysql的配置信息
Pools = application:get_env(emqx_backend_mysql,pools,[]),
%% 启动应用的root根监控
{ok, Sup} = emqx_backend_mysql_sup:start_link(Pools),
%% 注册
emqx_backend_mysql:register_metrics(),
%% 载入插件
emqx_backend_mysql:load(),
{ok, Sup}.
%% 应用停止,卸载插件
stop(_State) -> emqx_backend_mysql:unload().
2、emqx_backend_mysql_sup 模块源码分析
-module(emqx_backend_mysql_sup).
-include("mysql/include/emqx_backend_mysql.hrl").
%% 监听者
-behaviour(supervisor).
-export([start_link/1]).
-export([init/1]).
%% 启动 mysql池
start_link(Pools) ->
supervisor:start_link({local, emqx_backend_mysql_sup},
emqx_backend_mysql_sup,
[Pools]).
%% 从Pools列表中读取配置,然后启动 emqx_backend_mysql_cli 模块
init([Pools]) ->
{ok,{
{one_for_one, 10, 100},[pool_spec(Pool, Env) || {Pool, Env} <- Pools]}}.
%%{id,start,restart,shutdown,type,modules}
%% ChildId:{emqx_backend_mysql, Pool}
%% Pool:emqx_backend_mysql:pool_name(Pool)
%% Mod:emqx_backend_mysql_cli
%% Opts:Env
pool_spec(Pool, Env) ->
ecpool:pool_spec({emqx_backend_mysql, Pool},
emqx_backend_mysql:pool_name(Pool),
emqx_backend_mysql_cli,
Env).
源码地址:https://github.com/tlchun/emqx-backend-mysql-store.git ,按照文档进行操作,QoS1和QoS2的消息全部可以落地到mysql.