从Vernemq插件发布消息

时间:2016-02-24 11:07:58

标签: erlang mqtt

我想将HTTP请求转换为MQTT请求。因此,我收到了HTTP请求,其中包含主题和要发布的消息等信息。我必须将提供的消息发布到提供的主题。

我能够发布消息,但问题是我只能向我使用的函数提供主题和有效负载。以下是我发布的代码:

Data = mochiweb_request:parse_post(Req),
{RegisterFun, PublishFun, SubscribeFun} = vmq_reg:direct_plugin_exports(http_to_mqtt),
Topic    = get_value("topic", Data),
List_of_topics = string:tokens(Topic, "/"),
Lot = lists:map(fun(X) -> list_to_binary(X) end, List_of_topics),
Payload  = list_to_binary(get_value("message", Data)),
error_logger:info_msg("Topics: ~p~nPayload: ~p",[Lot, Payload]),
PublishFun(Lot,Payload),
Req:ok({"text/html", [], "<p>Thank you. <p>"})

这里我从vmq_reg获取的PublishFun只允许提供主题和消息。有没有其他方法我可以发布消息给Qos,Retain和Dup也有价值。

我正在使用mochiweb创建服务器并将其用作vernemq中的插件。

2 个答案:

答案 0 :(得分:1)

现在可以在Andre的新版VerneMQ中说明。

以下是它的工作原理:

Data = mochiweb_request:parse_post(Req),
{RegisterFun,PublishFun,SubscribeFun} = vmq_reg:direct_plugin_exports(http_to_mqtt),
Topic    = get_value("topic", Data),
List_of_topics = string:tokens(Topic, "/"),
Lot = lists:map(fun(X) -> list_to_binary(X) end, List_of_topics),
Payload  = list_to_binary(get_value("message", Data)),
Qos = erlang:list_to_integer(get_value("qos",Data)),
Retain = erlang:list_to_integer(get_value("retain",Data)),
error_logger:info_msg("Topics: ~p~nPayload: ~p~nQOS: ~p~nRetain: ~p",[Lot, Payload,Qos,Retain]),
PublishFun(Lot,Payload,#{qos => Qos, retain => Retain}),
Req:ok({"text/html", [], "<p>Thank you. <p>"})

答案 1 :(得分:0)

目前的版本不可能,但是未来的计划功能。