diff --git a/apps/emqx_bridge_mqtt/priv/emqx_bridge_mqtt.schema b/apps/emqx_bridge_mqtt/priv/emqx_bridge_mqtt.schema index face6277e..c8738cee6 100644 --- a/apps/emqx_bridge_mqtt/priv/emqx_bridge_mqtt.schema +++ b/apps/emqx_bridge_mqtt/priv/emqx_bridge_mqtt.schema @@ -214,8 +214,19 @@ end, Subscriptions = fun(Name) -> Configs = cuttlefish_variable:filter_by_prefix("bridge.mqtt." ++ Name ++ ".subscription", Conf), - lists:zip([Topic || {_, Topic} <- lists:sort([{I, Topic} || {[_, _, _, "subscription", I, "topic"], Topic} <- Configs])], - [QoS || {_, QoS} <- lists:sort([{I, QoS} || {[_, _, _, "subscription", I, "qos"], QoS} <- Configs])]) + Configs = cuttlefish_variable:filter_by_prefix("bridge.mqtt." ++ Name ++ ".subscription", Conf), + SubConfId = lists:usort([{T, I} || {[_, _, _, "subscription", I, "topic"], T} <- Configs]), + FindQoS = fun({T, I}) -> + QoSFilter = fun + ({[_, _, _, "subscription", Index, "qos"], QoS}) -> I == Index andalso {true, QoS}; + (_Topic) -> false + end, + case lists:filtermap(QoSFilter, Configs) of + [] -> {T, 0}; + QoSList -> {T, hd(QoSList)} + end + end, + [FindQoS(TopicAndIndex) || TopicAndIndex <- SubConfId] end, IsNodeAddr = fun(Addr) -> case string:tokens(Addr, "@") of