【问题标题】:Publish a message from Vernemq plugin从 Vernemq 插件发布消息
【发布时间】:2016-07-11 20:04:02
【问题描述】:

我想将 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 中的插件。

【问题讨论】:

    标签: erlang mqtt


    【解决方案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>"})
    

    【讨论】:

      【解决方案2】:

      这在当前版本中是不可能的,而是未来计划中的一个功能。

      【讨论】:

      • 有没有关于这个问题的更新。你能帮我解决一下吗?
      • 请通过电子邮件与我们联系。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      • 1970-01-01
      • 2014-06-26
      • 2018-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多