%% 查询保留消息
lookup_retain(Pool, Msg0) ->
case mysql_execute(Pool,lookup_retain_query,[proplists:get_value(topic, Msg0)]) of
{ok, Cols, [Row | _]} ->
M = record_to_msg(lists:zip(Cols, Row)),
[M#message{id = emqx_guid:from_base62(M#message.id)}];
{ok, _Cols, []} -> [];
{error, Error} ->
logger:error("Lookup retain error: ~p", [Error]),
[]
end.
%% 推送消息
message_publish(Pool, Msg) ->
%% 参数key封装
ParamsKey = [<<"${msgid}">>,
<<"${clientid}">>,
<<"${topic}">>,
<<"${qos}">>,
<<"${retain}">>,
<<"${payload}">>,
<<"${timestamp}">>],
%% 插入数据
case mysql_insert(Pool,message_publish_query,feed_var(ParamsKey, Msg)) of
{ok, Id} -> emqx_message:set_header(mysql_id, Id, Msg);
{error, Error} ->logger:error("Failed to store message: ~p", [Error]),
Msg
end.
%% 消息存储
message_store(Pool, Msg) ->
%% 批量插入
case mysql_insert_batch(Pool, Msg) of
{error, Error} ->
logger:error("Failed to store message: ~p", [Error]),
Msg;
_ -> Msg
end.
%% 保留消息
message_retain(Pool, Msg) ->
ParamsKey = [<<"${topic}">>,<<"${msgid}">>, <<"${clientid}">>,
<<"${qos}">>, <<"${payload}">>,<<"${timestamp}">>,
<<"${msgid}">>, <<"${clientid}">>, <<"${qos}">>,
<<"${payload}">>, <<"${timestamp}">>],
case mysql_execute(Pool, message_retain_query,feed_var(ParamsKey, Msg)) of
ok -> Msg;
{error, Error} ->
logger:error("Failed to retain message: ~p", [Error]),
Msg
end.
%% 删除保留消息
delete_retain(Pool, Msg) ->
case mysql_execute(Pool,
delete_retain_query,
feed_var([<<"${topic}">>], Msg))
of
ok -> Msg;
{error, Error} ->
logger:error("Failed to delete retain: ~p", [Error]),
Msg
end.
%% 回复消息
message_acked(Pool, Msg) ->
ParamsKey = [<<"${clientid}">>,<<"${topic}">>,<<"${mysql_id}">>, <<"${mysql_id}">>],
case mysql_execute(Pool,message_acked_query,feed_var(ParamsKey, Msg)) of
ok -> ok;
{error, Error} ->
logger:error("Failed to ack message: ~p", [Error])
end.
%% 执行sql语句
run_mysql_sql(Pool, Msg, SqlList) ->
%% 从SqlList 取参数执行函数
lists:foreach(
fun ({Sql, ParamsKey}) ->
case mysql_query(Pool, Sql, feed_var(ParamsKey, Msg)) of
ok -> ok;
error, Error} ->
logger:error("Sql:~p~n, params:~p, error: ~p",
[Sql, ParamsKey, Error])
end
end, SqlList),
Msg.