这一课,我们继续完成处理其他事件的代码,但是因为本课程的篇幅有限,这里只完成 IotHub 目前需要的 "client.disconnected" 和 "message.publish" 事件的处理代码,其他事件的处理很简单,只需要依葫芦画瓢就可以了。有需要的话,大家可以自行进行扩展。
处理 "client.disconnected" 事件
这个事件的处理和 "client.connected" 事件,不过需要过滤掉 client 因为用户名和密码没有通过认证,触发的 "client.disconnected":
%% emqx_rabbitmq_hook/src/emqx_rabbitmq_hook.erl
on_client_disconnected(#{}, auth_failure, _Env) ->
ok;
on_client_disconnected(#{client_id := ClientId, username := Username}, ReasonCode, _Env) ->
Reason = if
is_atom(ReasonCode) ->
ReasonCode;
true ->
unknown
end,
Doc = {
client_id, ClientId,
username, Username,
disconnected_at, emqx_time:now_ms(),
reason, Reason
},
emqx_rabbitmq_hook_cli:publish(bson_binary:put_document(Doc), <<"client.disconnected">>),