我想将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中的插件。
答案 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)
目前的版本不可能,但是未来的计划功能。