Análisis del código fuente del complemento MySQL de almacenamiento de datos de mensajes emqx (3)

%% 查询保留消息
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.

 

Supongo que te gusta

Origin blog.csdn.net/qq513036862/article/details/110350884
Recomendado
Clasificación