Erlang MQTT v5.0 Client compatible with MQTT v3.0
$ make
$ export WITH_WS=true
$ make
rebar.config
{deps, [{emqtt, {git, "https://github.com/emqx/emqtt", {tag, "v1.0.0"}}}]}.
Here is the simple usage of emqtt
library.
ClientId = <<"test">>.
{ok, ConnPid} = emqtt:start_link([{clientid, ClientId}]).
{ok, _Props} = emqtt:connect(ConnPid).
Topic = <<"guide/#">>.
QoS = 1.
{ok, _Props, _ReasonCodes} = emqtt:subscribe(ConnPid, {Topic, QoS}).
{ok, _PktId} = emqtt:publish(ConnPid, <<"guide/1">>, <<"Hello World!">>, QoS).
%% If the qos of publish packet is 0, `publish` function would not return packetid.
ok = emqtt:publish(ConnPid, <<"guide/2">>, <<"Hello World!">>, 0).
%% Recursively get messages from mail box.
Y = fun (Proc) -> ((fun (F) -> F(F) end)((fun(ProcGen) -> Proc(fun() -> (ProcGen(ProcGen))() end) end))) end.
Rec = fun(Receive) -> fun()-> receive {publish, Msg} -> io:format("Msg: ~p~n", [Msg]), Receive(); _Other -> Receive() after 5 -> ok end end end.
(Y(Rec))().
%% If you don't like y combinator, you can also try named function to recursively get messages in erlang shell.
Receive = fun Rec() -> receive {publish, Msg} -> io:format("Msg: ~p~n", [Msg]), Rec(); _Other -> Rec() after 5 -> ok end end.
Receive().
{ok, _Props, _ReasonCode} = emqtt:unsubscribe(ConnPid, <<"guide/#">>).
ok = emqtt:disconnect(ConnPid).
Not only the clientid
can be passed as parameter, but also a lot of other options
can be passed as parameters.
Here is the options which could be passed into emqtt:start_link/1.
-type(option() :: {name, atom()}
| {owner, pid()}
| {msg_handler, msg_handler()}
| {host, host()}
| {hosts, [{host(), inet:port_number()}]}
| {port, inet:port_number()}
| {tcp_opts, [gen_tcp:option()]}
| {ssl, boolean()}
| {ssl_opts, [ssl:ssl_option()]}
| {ws_path, string()}
| {connect_timeout, pos_integer()}
| {bridge_mode, boolean()}
| {clientid, iodata()}
| {clean_start, boolean()}
| {username, iodata()}
| {password, iodata()}
| {proto_ver, v3 | v4 | v5}
| {keepalive, non_neg_integer()}
| {max_inflight, pos_integer()}
| {retry_interval, timeout()}
| {will_topic, iodata()}
| {will_payload, iodata()}
| {will_retain, boolean()}
| {will_qos, qos()}
| {will_props, properties()}
| {auto_ack, boolean()}
| {ack_timeout, pos_integer()}
| {force_ping, boolean()}
| {properties, properties()}).
Apache License Version 2.0
EMQ X Team.