fix: bulk subscribe topics failed in the client.connected hook
This commit is contained in:
parent
52343e58c7
commit
73643e932f
|
@ -718,15 +718,18 @@ subscribe(#{clientid := ClientID, topic := Topic} = Sub) ->
|
||||||
end.
|
end.
|
||||||
|
|
||||||
subscribe_batch(#{clientid := ClientID, topics := Topics}) ->
|
subscribe_batch(#{clientid := ClientID, topics := Topics}) ->
|
||||||
case lookup(#{clientid => ClientID}) of
|
%% We use emqx_channel instead of emqx_channel_info (used by the emqx_mgmt:lookup_client/2),
|
||||||
{200, _} ->
|
%% as the emqx_channel_info table will only be populated after the hook `client.connected`
|
||||||
|
%% has returned. So if one want to subscribe topics in this hook, it will fail.
|
||||||
|
case ets:lookup(emqx_channel, ClientID) of
|
||||||
|
[] ->
|
||||||
|
{404, ?CLIENT_ID_NOT_FOUND};
|
||||||
|
_ ->
|
||||||
ArgList = [
|
ArgList = [
|
||||||
[ClientID, Topic, maps:with([qos, nl, rap, rh], Sub)]
|
[ClientID, Topic, maps:with([qos, nl, rap, rh], Sub)]
|
||||||
|| #{topic := Topic} = Sub <- Topics
|
|| #{topic := Topic} = Sub <- Topics
|
||||||
],
|
],
|
||||||
{200, emqx_mgmt_util:batch_operation(?MODULE, do_subscribe, ArgList)};
|
{200, emqx_mgmt_util:batch_operation(?MODULE, do_subscribe, ArgList)}
|
||||||
{404, ?CLIENT_ID_NOT_FOUND} ->
|
|
||||||
{404, ?CLIENT_ID_NOT_FOUND}
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
unsubscribe(#{clientid := ClientID, topic := Topic}) ->
|
unsubscribe(#{clientid := ClientID, topic := Topic}) ->
|
||||||
|
|
Loading…
Reference in New Issue